tarjan缩点(洛谷1726 上白泽慧音)
来源:互联网 发布:虚拟屏幕软件 编辑:程序博客网 时间:2024/05/19 15:22
在幻想乡,上白泽慧音是以知识渊博闻名的老师。春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄。因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点。人间之里由N个村庄(编号为1..N)和M条道路组成,道路分为两种一种为单向通行的,一种为双向通行的,分别用1和2来标记。如果存在由村庄A到达村庄B的通路,那么我们认为可以从村庄A到达村庄B,记为(A,B)。当(A,B)和(B,A)同时满足时,我们认为A,B是绝对连通的,记为<A,B>。绝对连通区域是指一个村庄的集合,在这个集合中任意两个村庄X,Y都满足<X,Y>。现在你的任务是,找出最大的绝对连通区域,并将这个绝对连通区域的村庄按编号依次输出。若存在两个最大的,输出字典序最小的,比如当存在1,3,4和2,5,6这两个最大连通区域时,输出的是1,3,4。
第1行:两个正整数N,M
第2..M+1行:每行三个正整数a,b,t, t = 1表示存在从村庄a到b的单向道路,t = 2表示村庄a,b之间存在双向通行的道路。保证每条道路只出现一次。
输出格式:
第1行: 1个整数,表示最大的绝对连通区域包含的村庄个数。
第2行:若干个整数,依次输出最大的绝对连通区域所包含的村庄编号。
输入样例#1:
5 51 2 11 3 22 4 25 1 23 5 1
输出样例#1:
31 3 5
tarjan缩点的裸题,染色解决即可,注意字典序
#include<bits/stdc++.h>#define inf 2147483647using namespace std;int ans=0,ansnum=inf, minc=0,cnt=0;int head[120000],low[200000],dfn[200000],book[200000],color[120000];int n,m;stack<int> s;struct Edge{int to,next,w;};struct Edge edge[200000];int cnta=0;void add(int x,int y){ edge[++cnta].to=y; edge[cnta].next=head[x]; head[x]=cnta; }void tarjan(int i){ dfn[i]=low[i]=++cnt; book[i]=1; s.push(i); int j; for(int k=head[i];k;k=edge[k].next) { j=edge[k].to; if(!dfn[j]) { tarjan(j); low[i]=min(low[j],low[i]); } else if(book[j]) low[i]=min(low[i],dfn[j]);}int minnum=inf;if(dfn[i]==low[i]){ int count=0; do { j=s.top();s.pop();color[j]=i;//染色,类似桶的功能 book[j]=0;//出栈了记得标记 count++; if(j<minnum) minnum=j; }while(i!=j); if(count>minc) { minc=count; ans=i; ansnum=minnum; } else if(count==minc&&minnum<ansnum) { minc=count; ans=i; ansnum=minnum; }}}int main(){ cin>>n>>m; int a,b,t; for(int i=1;i<=m;i++) { cin>>a>>b>>t; add(a,b); if(t==2) add(b,a); } for(int i=1;i<=n;i++) if(!dfn[i]) {cnt=0;tarjan(i); } cout<<minc<<endl;for(int i=1;i<=n;i++) if(color[i]==ans) cout<<i<<" "; return 0;}
阅读全文
0 0
- tarjan缩点(洛谷1726 上白泽慧音)
- 洛谷1262 间谍网络 tarjan缩点
- 洛谷p3387 拓扑+tarjan缩点
- Tarjan 缩点模板(洛谷P3387)
- Tarjan缩点模板(洛谷P3387)
- poj1904 tarjan缩点
- HDU3836 Tarjan缩点
- HDU3836(tarjan+缩点)
- 1827 tarjan+缩点
- tarjan+缩点
- tarjan + 缩点
- Tarjan缩点
- POJ1236----tarjan缩点
- tarjan+缩点
- hdu5934 Tarjan 缩点
- poj2186--tarjan+缩点
- hdu5934(tarjan缩点)
- Tarjan缩点模板
- kruskal+并查集基础模板题 [SCOI2005]繁忙的都市
- 最小生成树基础模板题(USACO Training Section 3.1 最短网络 Agri-Net)
- Java9 正式发布前的尝鲜之下载与配置环境变量
- 最小生成树+并查集(洛谷P1991 无线通讯网)
- 单源最短路径(dij+堆优化)
- tarjan缩点(洛谷1726 上白泽慧音)
- 二分图匹配匈牙利算法
- 51nod 1256 乘法逆元
- 网络最大流 EK算法
- 网络最大流 dinic算法
- 二分图匹配匈牙利算法([ZJOI2009]假期的宿舍)
- isap算法网络最大流
- FILTER&MAP
- 最小费用最大流基础模板(洛谷3381)