description
給出 nn 個點, mm 條邊的有向圖, 對於每個點 vv, 求 a(v)a(v) 表示從點 vv 出發, 能到達的編號最大的點。
input
第 11 行, 22 個整數 nn, mm。 接下來 mm 行, 每行 22 個整數 uiui, vivi, 表示邊 ⟨ui,vi⟩⟨ui,vi⟩。點用 1,2,...,n1,2,...,n 編號。
output
nn 個整數 a(1),a(2),...,a(n)a(1),a(2),...,a(n)。
sample
[input]
4 31 2
2 44 3
[output]
4 4 3 4
note
對於 60% 的資料, 1 ≤ n, k ≤ 103103;
對於 100% 的資料, 1 ≤ n, m ≤ 105105。
【**】
#include #include #include #include #include #include #include #include #define maxn 100005
using namespace std;
typedef pairpa;
setmp;
stacks;
int n,m,to[maxn],mx[maxn],from[maxn],pre[maxn],low[maxn],tme=0,fst[maxn],nxt[maxn],scc[maxn];
int scccnt=0,cnt=0,d[maxn],ft[maxn],nt[maxn],ct=0,de[maxn],t[maxn];
void add(int x,int y)
void add2(int x,int y)
int get()
void dfs(int x)
else if(!scc[to[i]])
} if(low[x]==pre[x]) }}
void init()
for(int i=1;i<=n;++i)if(!pre[i])dfs(i); //注意
}queueq;
void bfs() }}
void solveit()
} for(int i=1;i<=scccnt;++i)if(de[i]==0)q.push(i),de[i]=-1;
bfs();
for(int i=1;i
【注意】
*連通塊連邊時要判斷是否為同一連通塊
*從1~n未pre[ ]的進入dfs而不是d[ ]為0的
Tarjan縮點 SPFA 縮點
洛谷p3387縮點 tarjan spfa求dag上單源最短路模板題 用tarjan在原圖上求scc 縮點 用縮點之後的scc建乙個有向無環圖 scc權為此scc內所有點點權和 在新建的dag上將scc權視為邊權跑spfa 求scc 1 到scc n 的最長路即為所求答案 include inclu...
Tarjan演算法 縮點
我們這一篇是在已經了解tarjan演算法的基礎之上開始寫的,如果不了解的話,請先看大牛們 關於tarjan演算法的部落格。首先我們對於乙個有向無環的圖 dag 至少新增幾條邊才能使它變為強連通圖?我們很容易根據有向無環圖的性質得到,我們計算入度為零的點數為a,出度為零的點數為b,那麼我們至少需要新增...
Tarjan 縮點 模板
縮點以後,整張圖變為dag 有向無環圖 此時運用拓撲排序 求出度入度就可以完成許多事 題目 include include include include include include define ll long long using namespace std const int maxn 1...