洛谷月赛 SAC#1 - ACOJ云评测计划
来源:互联网 发布:电脑弹钢琴软件 编辑:程序博客网 时间:2024/05/16 06:45
题目描述
ACOJ的服务器简直是差到了一个令人发指的地步。于是SAC的出题人,也就是傻逼SOL,不得不强制要求每一个通过下载ACOJ软件包而搭建的分站,都为主站启动云端评测服务。
云评测服务是由网络来连接的。这样的网络连接是双向的;但是由于地理位置等因素的限制,并不是任意两台服务器都可以直接相连。ACOJ主站已经得到了可以直连的服务器的表,其中包含n个分站(包括主站)以及它们的m条连接情况,可以根据这个来分配各个分站的任务。
有一些分站的服主是SOL的脑残粉。他们会无条件地将他们的服务器提供给SOL。这些ACOJ分站称作“好站”。但是还有一些分站的服主是SOL黑。他们虽然拿到了ACOJ的服务端,但是并不愿意为SOL提供资源,于是利用黑科技关掉了云服务。也就是说,虽然主站仍然认为这些站点存在,但是它们不会起到任何作用——既不能传递通信,也不能进行评测。它们称作“坏站”。
经过千辛万苦的调查,SOL确定了ACOJ云评测系统中有最多k个坏站存在,而且这k个坏站似乎会使得ACOJ的云网络不再联通!大危机!
但是SOL太弱智了,并不能确定是哪k个。于是他请你来帮他找出任意一组可能会使得网络不再联通的k个站点,以便加强防范。
输入输出格式
输入格式:
输入包含m+1行。
第1行3个整数n、m、k。
接下来m行,每行两个整数a、b,表示标号为a和b的站点可以直接相连。
输出格式:
输出包含1行。
不超过k个整数,表示能够将原图割开的任意一组节点组合。
因为使用了Special Judge,所以节点的顺序并不用担心。只需要满足能够割开原图即可。
如果不存在这样的站点集合,输出“How oversuspicious you are, SOL!”;如果网络不存在任何坏站时本来就无法连通,输出“Poor SOL!”。
输入输出样例
输入样例#1:
4 4 21 22 33 44 1
输出样例#1:
1 3
输入样例#2:
4 6 21 22 33 44 11 32 4
输出样例#2:
How oversuspicious you are, SOL!
输入样例#3:
4 0 2
输出样例#3:
Poor SOL!
看完题发现是个np问题,然而发现k <= 3╮(╯▽╰)╭,于是就上大讨论术然后大力暴力于是就过了233.
代码如下
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int sz = 60100;int head[sz],nxt[sz],l[sz];int dfn[501],low[501],dfs_clock;bool is_cut[501];int tot = 1,n,m,k;bool use[501],vis[501];void build_edge(int f,int t){ l[tot] = t; nxt[tot] = head[f]; head[f] = tot ++;}int tarjan(int u,int fa){ int child = 0; dfn[u] = low[u] = ++ dfs_clock; for(int i = head[u] ; i ; i = nxt[i]) { int v = l[i]; if(!dfn[v] && !use[v]) { child ++; low[v] = tarjan(v,u); low[u] = min(low[u],low[v]); if(low[v] >= dfn[u]) is_cut[u] = 1; } else if(v != fa && dfn[v] < low[u] && !use[v]) low[u] = dfn[v]; } if(fa == 0 && child == 1) is_cut[u] = 0; return low[u];}int read(){ int x = 0 , f = 1; char in = getchar(); while(in < '0' || in > '9') { if(in == '-') f = -1; in = getchar(); } while('0' <= in && in <= '9') { x = x * 10 + in - '0'; in = getchar(); } return x * f;}void init(){ dfs_clock = 0; memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(is_cut,0,sizeof(is_cut));}void dfs(int u){ vis[u] = 1; for(int i = head[u] ; i ; i = nxt[i]) if(!use[l[i]] && !vis[l[i]]) dfs(l[i]); return ;}int main(){ n = read() , m = read() , k = read(); for(int i = 1 ; i <= m ; i ++) { int f = read() , t = read(); build_edge(f,t); build_edge(t,f); } { int ans = 0; for(int i = 1 ; i <= n ; i ++) if(!vis[i]) dfs(i),ans ++; if(ans > 1) { puts("Poor SOL!"); return 0; } } if(k == 1) { tarjan(1,0); for(int i = 1 ; i <= n ; i ++) if(is_cut[i]) { printf("%d\n",i); return 0; } } if(k == 2) { for(int i = 1 ; i <= n ; i ++) { init(); use[i] = 1; for(int j = 1 ; j <= n ; j ++) if(!use[j]) { tarjan(j,0); break; } use[i] = 0; for(int j = 1 ; j <= n ; j ++) if(j != i && is_cut[j]) { printf("%d %d\n",i,j); return 0; } } } if(k == 3) { for(int i = 1 ; i <= n ; i ++) { for(int j = i + 1 ; j <= n ; j ++) { init(); use[i] = 1 , use[j] = 1; for(int k = 1 ; k <= n ; k ++) if(!use[k]) { tarjan(k,0); break; } use[i] = 0 , use[j] = 0; for(int k = 1 ; k <= n ; k ++) if(k != i && k != j && is_cut[k]) { printf("%d %d %d\n",i,j,k); return 0; } } } } puts("How oversuspicious you are, SOL!"); return 0;}/*6 7 11 21 31 42 53 54 55 6*/
- 洛谷月赛 SAC#1 - ACOJ云评测计划
- SAC#1 - 组合数
- 洛谷P3414 SAC#1
- 洛谷 P3414 SAC#1
- 洛谷 P3413 SAC#1
- luoguP3413 SAC#1
- P3927 SAC E#1
- LuoguP3927 SAC E#1
- 洛谷月赛八连测 SAC E#1
- 【P3927】SAC E#1
- LuoguP3927 SAC E#1
- [luogu3927] SAC E#1
- 洛谷 P3927 SAC E#1
- 洛谷P3927 SAC E#1
- 数位DP——Luogu3413 SAC#1
- 洛谷 P2246 SAC#1 - Hello World(升级版)
- 【洛谷10月月赛R1提高组】 SAC E#1
- 洛谷10月月赛R1T1-SAC E#1
- Sentence Screen Fitting
- UVA 1364 Knights of the Round Table(双联通+二分图)
- JAVA 入门测试(二)
- python pickle, cPickle 模块
- LeetCode 324. Wiggle Sort II
- 洛谷月赛 SAC#1 - ACOJ云评测计划
- 数值的整数次方
- 软考总结--反思
- JQuery Ajax实例
- noip2014 解方程 Hash+数学
- 浅谈分布式组件-kafka、zookeeper
- 大文件 and 多下载任务的封装(三)--断点续传,下载类的整合封装,以及使用
- 卸载oracle11g 的步骤
- 学习opencv_学习笔记一