题目: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;
}

本文解析了Codeforces B题,该题目要求判断给定图的每个连通分量是否为完全图。通过DFS遍历计算顶点数和边数,并验证v*(v-1)是否等于边数e来判断。
11万+

被折叠的 条评论
为什么被折叠?



