记录编号 333532 评测结果 AAAAAAAAAA
题目名称 备用交换机 最终得分 100
用户昵称 GravatarSky_miner 是否通过 通过
代码语言 C++ 运行时间 0.011 s
提交时间 2016-10-30 21:20:04 内存使用 0.56 MiB
显示代码纯文本
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
	x=0;char ch;bool flag = false;
	while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
	while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
const int maxn = 128;
const int maxm = maxn*maxn;
struct Edge{
	int to,next;
}G[maxm<<1];
int head[maxn],cnt;
int sco,son,ans;
void add(int u,int v){
	G[++cnt].to = v;
	G[cnt].next = head[u];	
	head[u] = cnt;
}
int dfn[maxn],low[maxn],dfs_clock,n;
bool cut[maxn];
#define v G[i].to
void dfs(int u){
	dfn[u] = low[u] = ++ dfs_clock;
	for(int i = head[u];i;i=G[i].next){
		if(!dfn[v]){
			dfs(v);
			if(u == sco) ++ son;
			else{
				low[u] = cat_min(low[u],low[v]);
				if(low[v] >= dfn[u] && !cut[u]){
					cut[u] = true;
					++ ans;
				}
			}
		}else low[u] = cat_min(dfn[v],low[u]);
	}
}
#undef v
void tarjan(){
	for(int i=1;i<=n;++i){
		if(!dfn[i]){
			sco = i;
			son = 0;
			dfs(i);
			if(son > 1 && !cut[i]){
				cut[i] = true;
				++ans;
			}
		}
	}
}
int main(){
	freopen("gd.in","r",stdin);
	freopen("gd.out","w",stdout);
	read(n);
	int u,v;
	while(scanf("%d %d",&u,&v) != EOF){
		add(u,v);add(v,u);
	}
	tarjan();

	printf("%d\n",ans);
	for(int i=1;i<=n;++i) if(cut[i]) printf("%d\n",i);
	getchar();getchar();
	return 0;
}