【UOJ67】【JZOJ4679】种树
来源:互联网 发布:away3d教程 源码 编辑:程序博客网 时间:2024/06/07 04:59
Description
原题在:http://uoj.ac/problem/67
Solution
首先确定树的概念:有n个点,n-1条边的无向连通图。
那么现在我们有n个点m条边,我们现在要删除一个点u首先要满足原图要联通,然后才满足树的条件。
那么,用Tarjan求出所有割点,那么非割点去掉后仍保持联通,那么在此基础上判断是否是树即可。
Code
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)#define N 100001#define M 200001#define ll long longusing namespace std;int to[M],next[M],last[M],num=0;int ds[N];int c[N];bool bz[N];bool r[N];void link(int x,int y){ num++; to[num]=y; next[num]=last[x]; last[x]=num;}int dfn[N],low[N];int dep=0;int cut[N];void tarjan(int x){ low[x]=dfn[x]=++dep; for(int i=last[x];i;i=next[i]) { int v=to[i]; if(!dfn[v]) { tarjan(v); low[x]=min(low[x],low[v]); if(low[v]>=dfn[x]) cut[x]++; } else low[x]=min(low[x],dfn[v]); }}int main(){ int n,m; cin>>n>>m; fo(i,1,m) { int u,v; scanf("%d %d",&u,&v); ds[u]++; ds[v]++; link(u,v); link(v,u); } fo(i,1,n) if(!dfn[i]) cut[i]--,tarjan(i); fo(i,1,n) if(cut[i]<=0) { if(n-2==m-ds[i]) c[++c[0]]=i; } cout<<c[0]<<endl; fo(i,1,c[0]) printf("%d ",c[i]);}
1 0
- 【UOJ67】【JZOJ4679】种树
- JZOJ4679. 【NOIP2016提高A组8.11】种树
- 种树
- 种树
- [堆]种树
- 种树问题
- [bzoj2151]种树
- [BZOJ2151]种树
- 蓝桥杯 种树
- bzoj2151 种树
- BZOJ2151 种树
- codevs1342 种树
- bzoj2151 种树
- 【Bzoj2151】种树
- 2151: 种树
- 2151: 种树
- 【bzoj2151】种树
- UOJ67-割点(tarjan)-新年的毒瘤
- [HDU 5823] color II (状压+暴力枚举子集)
- Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-上
- 浏览器浏览记忆(history)几则技巧记录
- js 压缩图片 H5
- 批判性思维 带你走出思维的误区 原书第9版_(美)摩尔,(美)帕克著2012.01北京:机械工业出版社_P308_完整版PDF电子书下载 带索引书签目
- 【UOJ67】【JZOJ4679】种树
- Java_文件上传与下载(一)
- 采药2_纪中2540_dp
- 1045: 愚人节的礼物
- Linux基础总结之找工作阶段
- 在使用ffmpeg安装编译x265时候的错误
- Java判断文件类型
- Eclipse显示空白符,如空格、制表符、换行符等
- ajax -jsonp