博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基环树找环-模板
阅读量:4973 次
发布时间:2019-06-12

本文共 1361 字,大约阅读时间需要 4 分钟。

#include 
using namespace std;#define INF 0x3f3f3f3f#define MAXN 1000010#define MAXM 5010inline int read(){ int x = 0,ff = 1;char ch = getchar(); while(!isdigit(ch)) { if(ch == '-') ff = -1; ch = getchar(); } while(isdigit(ch)) { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); } return x * ff;}inline void write(int x){ if(x < 0) putchar('-'),x = -x; if(x > 9) write(x / 10); putchar(x % 10 + '0');}int a,ti = 0,cnt = 0,fa[MAXN],vis[MAXN],loop[MAXN];int lin[MAXN],tot = 0;struct edge{ int y,v,next;}e[MAXN];inline void add(int xx,int yy,int vv){ e[++tot].y = yy; e[tot].v = vv; e[tot].next = lin[xx]; lin[xx] = tot;}void get_loop(int x){ vis[x] = ++ti; for(int i = lin[x],y;i;i = e[i].next) { if((y = e[i].y) == fa[x]) continue; if(vis[y]) { if(vis[y] < vis[x]) continue; loop[++cnt] = y; for(y = fa[y];y != fa[x];y = fa[y]) loop[++cnt] = y; } else fa[y] = x,get_loop(y); }} int main(){ a = read(); for(int i = 1;i <= a;++i) { int y,v; y = read(); v = read(); add(i,y,v); add(y,i,v); } get_loop(1); for(int i = 1;i <= cnt;++i) write(loop[i]),putchar(' '); return 0;}

 

转载于:https://www.cnblogs.com/AK-ls/p/10371320.html

你可能感兴趣的文章
Linux 高性能服务器编程——高级I/O函数
查看>>
安卓天天练练(二)相对布局和帧布局
查看>>
更新与升级 FreeBSD
查看>>
File.Exists 文件不存在 Or FileNotFoundException
查看>>
BZOJ 1529 [POI2005]ska Piggy banks:并查集
查看>>
java多态与异常处理——动手动脑
查看>>
软件测试技术HW03-printPrimes()
查看>>
SQL Server2008附加数据库之后显示为只读时解决方法
查看>>
linux vi编辑
查看>>
IO流--复制picture ,mp3
查看>>
linux 环境变量
查看>>
JQuery UI datepicker 使用方法
查看>>
转:网页启用Gzip压缩 提高浏览速度
查看>>
poj 3321(树状数组)
查看>>
《Java程序设计》第六周学习总结
查看>>
Linux正则表达式
查看>>
Mysql tinyint长度为1时在java中被转化成boolean型
查看>>
【刷题】BZOJ 3930 [CQOI2015]选数
查看>>
SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例
查看>>
nagios 自定义插件demo
查看>>