NOIPの模拟_2016_8_11_t2_种树
来源:互联网 发布:网络被攻击了怎么办 编辑:程序博客网 时间:2024/06/02 00:44
题目の大意:
现在有一个无向图,我们可以删去一个节点和与其相连的边,使得修改后的图变成一棵树,求所有可能的方案和方案数~
比赛时の想法:
暴力枚举每一个删除的点,然后暴力判断一下删去这个点和他相连的边后图是否变成一颗树,m=n-1时删去一个度数为1的边。
正解:
一开始有n个点,在删去一个点后成为一颗树,那么树中就有n-2条边,当前删去的点如果是合法的,那么它的度数就是m-(n-2)但是考虑到删去一个点后可能把图成两个部分,所以当这个点时无向图的割点时这个点也是不合法的,那么我们直接tarjan求割点就好了
贴代码~
var dfn,low,fa:array[0..100005]of longint; a:array[0..100005,0..105]of longint; bz,b:array[0..100005]of boolean; i,j,k,l,n,m,x,y,p,ans:longint;function min(x,y:longint):longint;begin if x>y then exit(y) else exit(x);end;procedure dfs(x:longint);var i,j,son:longint;begin b[x]:=true; inc(p); dfn[x]:=p; low[x]:=p; son:=0; for i:=1 to a[x,0] do begin if b[a[x,i]]=false then begin inc(son); fa[a[x,i]]:=x; dfs(a[x,i]); low[x]:=min(low[a[x,i]],low[x]); if (dfn[x]=1) and (son>=2) then bz[x]:=true else if (dfn[x]>1) and (low[a[x,i]]>=dfn[x]) then bz[x]:=true; end else if fa[x]<>a[x,i] then low[x]:=min(low[x],dfn[a[x,i]]); end;end;begin // assign(input,'2.in'); reset(input); readln(n,m); for i:=1 to m do begin readln(x,y); inc(a[x,0]); a[x,a[x,0]]:=y; inc(a[y,0]); a[y,a[y,0]]:=x; end; dfs(1); x:=m-n+2; ans:=0; for i:=1 to n do if (a[i,0]=x) and (bz[i]=false) then inc(ans); writeln(ans); for i:=1 to n do if (a[i,0]=x) and (bz[i]=false) then write(i,' '); writeln; // close(input);end.
0 0
- NOIPの模拟_2016_8_11_t2_种树
- C++——NOIP模拟题——种树
- 【NOIP提高】种树
- NOIPの模拟_2016_7_19_t1_腐败
- NOIPの模拟_2016_7_20_t2_Graph Coloring
- NOIPの模拟_2016_8_14_t1_传送带
- Noip模拟
- 种树
- 种树
- 【NOIP模拟】20151004模拟
- 【NOIP模拟】 20151005模拟
- 【NOIP模拟】 20151006模拟
- 【NOIP模拟】 20151007模拟
- 【NOIP模拟】20151014模拟
- 【NOIP模拟】20151015模拟
- NOIPの模拟_2016_7_19_t2_弄提纲
- NOIPの模拟2016_8_11_t1_钱仓
- NOIPの模拟_2016_8_14_t2_疯狂的火神
- 架构师之路--服务器集群搭建、管理、与快速部署
- 转载Android Audio架构
- 第一篇技术博客,人生的第一篇博客!
- 二叉排序树
- 用Java模仿银行自助存取一体机(ATM)
- NOIPの模拟_2016_8_11_t2_种树
- 原根
- jQueryAJAX的$.ajax()用jsonp解决跨域问题
- openGL学习
- 听说每个人都会写单例,你会了吗?
- 9.bash2
- ACdream1726
- 8.11 bzoj1036
- 第三方开源库:Zxing实现扫描和生成 一维码 + 二维码