题目:http://codeforces.com/contest/791/problem/B
题意:
给一个图,判断每个连通分量是不是完全图?
分析:
其实知道是求完全图就很好做了、判断每个连通分量的是否v*(v-1)==e即可,v是顶点数量,e是边的数量。
代码:
#include<bits/stdc++.h>
using namespace std;
bool vis[200005];
vector<int>a[200005];
long long v,e;
void dfs(int x) {
v++;
vis[x]=true;
for(int i=0; i<a[x].size(); i++) {
e++;
if(!vis[a[x][i]])
dfs(a[x][i]);
}
}
int main() {
int n,m;
cin>>n>>m;
for(int i=0; i<m; i++) {
int x,y;
scanf("%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
for(int i=1; i<=n; i++)
if(!vis[i]) {
v=e=0;
dfs(i);
if(v*(v-1)!=e) {
cout<<"NO"<<endl;
return 0;
}
}
cout<<"YES"<<endl;
}