趕快加入我們來參與討論吧!
您需要 登錄 才可以下載或查看,沒有帳號?加入我們
x
本帖最後由 jd3 於 2014-9-28 20:02 編輯
為什麼用union-find會比dfs下去分快?
是我的常數太大嗎...
TLE CODE
[C++] 純文本查看 復制代碼 #include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int> list[100010];
int color[100010];
bool dfs(int node)
{
for(int i = 0 ; i < list[node].size() ; i++)
{
int next_node = list[node][i];
if(color[next_node] == color[node])
return false;
else if(color[next_node] == -1)
{
color[next_node] = 1-color[node];
if(dfs(next_node) == false)
return false;
}
}
return true;
}
int main()
{
int n,m;
int a,b;
while(~scanf("%d%d",&n,&m))
{
for(int i = 0 ; i < n ; i++)
{
color[i] = -1;
list[i].clear();
}
for(int i = 0 ; i < m ; i++)
{
scanf("%d%d",&a,&b);
list[a].push_back(b);
list[b].push_back(a);
}
bool yes = true;
for(int i = 0 ; i < n ; i++)
{
if(color[i] == -1)
{
// cout << "start : " << i << endl;
color[i] = 1;
if(!dfs(0))
{
yes = false;
break;
}
}
}
if(yes)
puts("YES");
else
puts("NO");
}
return 0;
}
|