IMP-Party题解

IMP-Party题解

先说一下团的定义:
团是G的一个完全子图,任意两点之间都有边相连。
所以对于任意无边相连的两点,一定不属于相同的团。
因为一定存在一个大小为\(\frac{2n}{3}\)的团,我们采取一换一的方案,正好会剩下\(\frac{n}{3}\)的团。

#include<bits/stdc++.h>
using namespace std;
const int N=3006;
int n,m,t1,t2,num=0;
bool e[N][N],v[N];
inline int read(){
   int T=0,F=1; char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-') F=-1; ch=getchar();}
   while(ch>='0'&&ch<='9') T=(T<<3)+(T<<1)+(ch-48),ch=getchar();
   return F*T;
}
int main(){
   n=read(),m=read();
   for(int i=1;i<=m;++i) t1=read(),t2=read(),e[t1][t2]=e[t2][t1]=1;
   for(int i=1;i<=n;++i){
       if(v[i]) continue;
       for(int j=i+1;j<=n;++j) if(!v[j]&&!e[i][j]&&!e[j][i]){v[i]=1,v[j]=1; break;} 
   }
   for(int i=1;i<=n;++i) if(!v[i]&&num<n/3) ++num,printf("%d ",i);
   return 0;
}
posted @ 2019-11-11 18:11  lsoi_ljk123  阅读(286)  评论(0编辑  收藏  举报