日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

紫魔法师 (思维 图论 dfs)

發布時間:2024/3/26 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 紫魔法师 (思维 图论 dfs) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:登錄—專ti業IT筆試面試備考平臺_牛客網
?

題目描述

“サーヴァント、キャスター、Medea。”--紫魔法師

給出一棵仙人掌(每條邊最多被包含于一個環,無自環,無重邊,保證連通),要求用最少的顏色對其頂點染色,滿足每條邊兩個端點的顏色不同,輸出最小顏色數即可

輸入描述:

第一行包括兩個整數n,m,表示頂點數和邊數 n <= 100000, m <= 200000 接下來m行每行兩個整數u,v,表示u,v之間有一條無向邊,保證數據合法

輸出描述:

一行一個整數表示最小顏色數

示例1

輸入

復制3 4 1 2 2 3 3 4 1 4

3 4 1 2 2 3 3 4 1 4

輸出

復制2

2

題解:

題意有點迷,大概是給你一個無向連通圖,每條邊最多參與形成一個環,現將所有節點染色,要求一條邊上的兩個節點顏色不同,問最少顏色種數。

看題解的,最開始覺得很復雜,又不是簡單樹形結構,一個點連幾個亂七八糟的環根本想不明白。但仔細一想,題頭是仙人掌,而且說了一個環不會覆蓋也不會被覆蓋其他環,那么圖肯定是長這樣的:(有點抽象)

這么模擬一下,好像最多三個,最少兩個顏色就能覆蓋全圖對吧,那么具體地,我們跑一次dfs,判斷一下1,2顏色來回染會不會沖突,沖突了就是3個,沒沖突兩個就結了。

/*keep on going and never give up*/ #include<bits/stdc++.h> using namespace std; #define int long long #define endl "\n" #define pb push_back #define fast std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); inline int read(){int tep;return scanf("%lld",&tep);} const int maxn=2e6+10; const int mod=1e9+7; int n,m,k,col[maxn]; vector<int>e[maxn]; bool dfs(int x,int cl){col[x]=cl;//cout<<x<<" "<<cl<<endl;for(auto y:e[x]){if(!col[y]) if(dfs(y,3-cl))return 1;if(col[y]==cl) return 1;}return 0; } signed main() {fast cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;e[x].pb(y);e[y].pb(x);}if(m==0) { cout<<0; return 0^0;}int t=dfs(1,1); cout<<t+2;return 0^0; }

?

總結

以上是生活随笔為你收集整理的紫魔法师 (思维 图论 dfs)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。