poj2186Popular Cows tarjan缩点
来源:互联网 发布:什么时候统一台湾 知乎 编辑:程序博客网 时间:2024/04/25 02:54
//n个奶牛,//A B 表示A认为B出名,而且其有传递性//如A认为B出名,B认为C出名,那么A认为C出名//问有多少头奶牛所有的奶牛都认为其出名//先对这个图缩点,记录每一个缩点的个数,然后找出度为0有且只有一个点//如果是,那么那个点缩了几个点就是答案#include<cstdio>#include<cstring>#include<iostream>#include<vector>using namespace std ;const int maxn = 100010 ;int dfn[maxn] , low[maxn] , stack[maxn] ;int isstack[maxn] , head[maxn] ;int vis[maxn] ;int belong[maxn] , sum[maxn] , ans[maxn] ;int step , num , top ;vector<int> vec[maxn] ;int n , m ;void init(){ for(int i = 0;i <= n;i++) vec[i].clear() ; step = num = top = 0 ; memset(dfn , 0 , sizeof(dfn)) ; memset(vis ,0 , sizeof(vis)) ; memset(isstack , 0 , sizeof(isstack)) ; memset(sum , 0 , sizeof(sum)) ; memset(ans , 0 , sizeof(ans)) ;}void tarjan(int u){ isstack[u] = 1; stack[++top] = u ; low[u] = dfn[u] = ++step ; for(int i = 0;i < vec[u].size() ; i++) { int v = vec[u][i] ; if(!dfn[v]) { tarjan(v) ; low[u] = min(low[u] , low[v]) ; } else if(isstack[v]) low[u] = min(low[u] , dfn[v]) ; } if(low[u] == dfn[u]) { num++ ; int v = 0 ; while(u != v) { v = stack[top--] ; belong[v] = num ; ans[num]++ ; isstack[v] = 0 ; } }}int main(){ while(~scanf("%d%d" , &n , &m)) { init() ; int u , v ; for(int i = 1;i <= m;i++) { scanf("%d%d" , &u , &v) ; vec[u].push_back(v) ; } for(int i = 1;i <= n;i++) if(!dfn[i]) tarjan(i); int flag = 0 ; for(int i = 1;i <= n;i++) for(int j = 0 ; j < vec[i].size() ;j++) { int v = belong[vec[i][j]] ; int u = belong[i] ; if(v == u)continue ; vis[u] = 1 ; } int pos ; for(int i = 1;i <= num;i++) if(!vis[i]) { flag++ ; pos = i ; } if(flag == 1) cout<<ans[pos]<<endl; else {puts("0");} }}
0 0
- poj2186Popular Cows tarjan缩点
- poj2186Popular Cows【scc+缩点】
- poj2186Popular Cows(强连通+缩点)
- POJ2186Popular Cows(强连通分量+缩点)
- poj2186Popular Cows_ 强连通分支_缩点tarjan算法
- poj2186Popular Cows
- POJ2186Popular Cows
- poj2186Popular Cows
- poj 2186 Popular Cows (tarjan + 缩点)
- POJ 2186 Popular Cows -- tarjan 缩点
- poj2186 Popular Cows(tarjan + 缩点)
- poj Popular Cows(tarjan +缩点)
- POJ2186--Popular Cows(Tarjan+缩点)
- 【POJ2186】Popular Cows(tarjan+缩点)
- POJ 2186 popular cows (tarjan + 缩点)
- POJ 2186 Popular Cows 【Tarjan+缩点】
- PKU2186(Popular Cows)+强连通分支Tarjan算法+缩点
- (tarjan缩点)poj 2186 Popular Cows
- 找出数组中前K小的值&最小堆
- Python-Selenium2做Web自动化测试(5)-对象事件的操作(鼠标操作、键盘操作)
- 微信图书馆查询php
- C++中的友元——编程界的老王
- .def文件格式
- poj2186Popular Cows tarjan缩点
- hdu5355Cake 构造+dfs
- Java项目建构工具之Maven
- 【hdoj 1114】Piggy-Bank
- android4.02在x4412平台编译碰到的问题
- 转:oracle number(p,s)数据类型
- hud2769 Disgruntled Judge(扩展欧几里德算法)
- 操作系统——中断、异常和系统调用比较
- 做自己,变度