4296: [PA2015]Mistrzostwa|图的联通
2016-03-14 10:47
225 查看
上来就看错题,是选出来的点集联通,不是让剩下的点联通。。。
然后这不就是SB题么。。把该删的点都删去,然后找一个最大的连通图。
然后这不就是SB题么。。把该删的点都删去,然后找一个最大的连通图。
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<queue> #include<vector> #include<set> #include<map> #include<iostream> #include<algorithm> #define N 400022 using namespace std; int sc() { int i=0;char c=getchar(); while(c>'9'||c<'0')c=getchar(); while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i; } int head ,nxt ,lst ,mark ; int q ,d ,tot,n,m,K,top,ans,now; int a ,b ; void insert(int x,int y) { lst[++tot]=y;nxt[tot]=head[x];head[x]=tot; lst[++tot]=x;nxt[tot]=head[y];head[y]=tot; } void dfs(int x) { mark[a[++now]=x]=1; for(int i=head[x];i;i=nxt[i]) if(!mark[lst[i]]) dfs(lst[i]); } int main() { n=sc(),m=sc(),K=sc(); for(int i=1;i<=m;i++) { int x=sc(),y=sc(); insert(x,y); d[x]++,d[y]++; } for(int i=1;i<=n;i++) if(d[i]<K)q[++top]=i; for(int i=1;i<=top;i++) { int x=q[i];mark[x]=1; for(int j=head[x];j;j=nxt[j]) { d[lst[j]]--; if(d[lst[j]]==K-1)q[++top]=lst[j]; } } ans=0; for(int i=1;i<=n;i++) if(!mark[i]) { now=0; dfs(i); if(now>ans) { ans=now; for(int i=1;i<=now;i++) b[i]=a[i]; } } if(!ans) puts("NIE"); else { cout<<ans<<endl; sort(b+1,b+ans+1); for(int i=1;i<=ans;i++) printf("%d ",b[i]); } return 0; }
相关文章推荐
- cmd中乱码暂时解决
- this bind apply call
- java中封装的概念
- iOS强制切换横屏、竖屏
- Android IPC机制之ContentProvider
- C++之奇技淫巧
- SVG_图形交叉_测试
- CocoaPods使用:
- wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容)
- altium designer10创建项目
- java命令行HPROF Profiler(转)
- 【SVN】SVN增量打包
- Remove Duplicates from Sorted Array
- 送给前线码农的话 - 大牛们的经典语录
- Android 实现颜色选取圆盘
- mogodb常用操作
- AS快捷键
- YGC越来越慢的原因分析
- Exception in thread "main" org.hibernate.HibernateException: save is not valid without active transaction
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月14日)