本文共 853 字,大约阅读时间需要 2 分钟。
就是有一些人和一些关系,从中选出一些人,他们与联盟中其他人都有关系,即构成完全图,剩下的其他人不能有一个关系
首先,度为0和1的应该先去掉,同时标记(与去掉的点)相关联的点为不可去掉,度同时-1,否则去掉的集合里就会出现关系;
继续搜索度更高的点,把可去的去掉,标记与其关联的点为不可去
重复上述操作,直到没有点可以去掉,此时判断是否为完全图,即不可去点的个数==min(deg[u]+1),u为所有剩下的不可去点
参考链接:http://www.cnblogs.com/staginner/archive/2012/08/21/2648919.html
代码:
#include#include #include #include using namespace std;int n,m;const int maxn=50010;int deg[maxn];//存入度数vector G[maxn];//节点int p[maxn];bool inis[maxn];//标记哦void init(){ int i,j; memset(deg,0,sizeof(deg)); for(i=0; i<=n; i++) { G[i].clear(); } int u,v; while(m--) { cin>>u>>v; G[u].push_back(v); G[v].push_back(u); deg[u]++; deg[v]++; }}bool cmp(int u,int v){ return deg[u] >n>>m) { if(n==0&&m==0) break; if(m==0) { cout<<"Y"<