P3524 [POI2011]IMP-Party 题解
前置芝士
团
设 为 子图,当 中任意两点都有边相连,则 为 的一个团。
此图为本题样例
最大团:
大小为 的团:
一点点的图论
Description
给定一个大小为 的图,保证 为 的倍数,且存在一个大小为 的团,要求输出一个大小为 的团(输出点编号即可)。
Solution
由题意得: 至少有 个点两两相连,所以剩下的 个点与这个大小为 两两不一定相连。那就只要见一对点不相连,就删一对,见两对删两对。明显,最多只会删 对点,也就是 个点,剩下的点即为题目所求。
结合样例
无连边,删去。
无连边,删去。
即为题目所求 。
Code
int n,m,cnt;
bool is_con[10010][10010],vis[10010]; //是否连边或删除
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
is_con[a][b]=is_con[b][a]=1; //连边
}
for(int i=1;i<=n;i++){
if(vis[i]) continue;
for(int j=1;j<=n;j++){
if(j==i||vis[j]||is_con[i][j]) continue; //已经删了或不
vis[i]=1; //满足删的条件
vis[j]=1;
break;
}
}
for(int i=1;i<=n;i++){
if(vis[i]) continue;
cout<<i<<" ";
cnt++;
if(cnt==n/3) return 0; //大小已满足
}
cout<<endl;
return 0;
}
完结撒花!!
本文作者:larryyu_blog
本文链接:https://www.cnblogs.com/larryyu/p/17054830.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步