poj 1236 tarjan缩点(能达到全图的最少起点数)
来源:互联网 发布:mycat 性能优化 编辑:程序博客网 时间:2024/05/17 07:37
题意:有若干学校,某些学校可以达到其他学校。问题1:一个新软件要给予全部学校最少给多少个学校;问题2:将软件随机给学校,问较之问题1的最少数量需要增加多少条道路?
思路:tarjan求强连通分量,之后缩点形成有向无环图。有向无环图中所有入度不为0的点,一定可以由某个入度为0的点出发可达。 (由于无环,所以从任何入度不为0的点往回走,必然终止于一个入度为0的点)。问题一为此图入度为0的定点数。问题2为图中入度为0和出度为0的顶点数量的大者。
输入:
5
2 4 3 0
4 5 0
0
0
1 0
输出:
1
2
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <cstdlib>using namespace std;#define INF 0x3fffffff#define N 105struct edge{ int y,next;}e[N*N*2];int n,first[N],top,dfn[N],low[N];int in[N],out[N],strong[N],stack[N],instack[N],con,id,ts;void add(int x,int y){ e[top].y = y; e[top].next = first[x]; first[x] = top++;}void tarjan(int x){ int i; dfn[x] = low[x] = ++id; stack[ts++] = x; instack[x] = 1; for(i = first[x];i!=-1;i=e[i].next){ if(dfn[e[i].y] == -1){ tarjan(e[i].y); low[x] = min(low[x],low[e[i].y]); }else if(instack[e[i].y]) low[x] = min(low[x],dfn[e[i].y]); } if(dfn[x] == low[x]){ con++; do{ strong[stack[--ts]] = con; instack[stack[ts]] = 0; }while(x!=stack[ts]); }}int main(){ int i,j,res1,res2; scanf("%d",&n); top = id = con = ts = res1 = res2 = 0; memset(first, -1, sizeof(first)); memset(dfn, -1, sizeof(dfn)); memset(low, 0, sizeof(low)); memset(instack, 0, sizeof(instack)); memset(in, 0, sizeof(in)); memset(out, 0, sizeof(out)); for(i = 1;i<=n;i++) while(scanf("%d",&j) && j) add(i,j); for(i = 1;i<=n;i++) if(dfn[i] == -1) tarjan(i); if(con == 1){//只有一个强连通分量时候要特判!!!!!! printf("1\n0\n"); return 0; } for(i = 1;i<=n;i++) for(j = first[i];j!=-1;j=e[j].next) if(strong[i] != strong[e[j].y]){ out[strong[i]]++; in[strong[e[j].y]]++; } for(i = 1;i<=con;i++){ if(!in[i]) res1++; if(!out[i]) res2++; } printf("%d\n%d\n",res1,max(res1,res2)); return 0;}
0 0
- poj 1236 tarjan缩点(能达到全图的最少起点数)
- POJ-1236(tarjan缩点)
- POJ 1236(tarjan+缩点)
- poj 3177 Redundant Paths 【无向图增加最少的边是图成为边—双连通】【tarjan求EBC + 缩点 统计度数为1的EBC】
- POJ 3177--Redundant Paths【无向图增加最少的边成为边双连通图 && tarjan求ebc && 缩点构造缩点树】
- POJ 3352--Road Construction【无向图增加最少的边成为边双连通图 && tarjan求ebc && 缩点构造缩点树】
- poj 1236 Network of Schools(tarjan 缩点)
- poj 1236 Network of Schools 1 (tarjan 缩点)
- POJ 1236 Network of Schools(tarjan缩点)
- POJ 1236 Tarjan缩点及思维..
- poj Popular Cows(tarjan +缩点)
- POJ-3177(tarjan缩点)
- 对Tarjan的理解(详) poj 2186 缩点+Tarjan
- poj 1236+hdu2767 有向图 缩点+看度数(tarjan)
- poj 2186 (tarjan 缩点)
- hdoj 1827 Summer Holiday 【有向图 连通最少的点来间接连通所有点】 【tarjan求 SCC + 缩点】
- poj Network of Schools 1236 (强连通分量+缩点) (问添加几个点最少点是所有点连接+添加最少边使图强连通) 好题
- Summer Holiday 【有向图中连通最少的点来使其整个图 连通的】+【tarjan求SCC +缩点】
- OpenCV安装VS版本问题
- mysql_store_result和mysql_use_result的区别
- NSData 日期 日期是由时间戳表示的,单位是秒
- linux内核地址空间
- strongswan ipsec 和思科 ASA5550 对接
- poj 1236 tarjan缩点(能达到全图的最少起点数)
- google code jam 2014 RB_A
- 关于C++中的友元函数的总结
- Java类集(接口继承的关系)
- bzoj 2458: [BeiJing2011]最小三角形 题解
- 华为上机--重复字符过滤
- 排列
- compare 比较常用方法 NSOrderedDescending 升序 NSOrderedSame 一样 NSOrderedAscending 降序
- AcRx库概述