縮點以後,整張圖變為dag(有向無環圖),此時運用拓撲排序/求出度入度就可以完成許多事
題目:
#include#include#include#include#include#include#define ll long long
using namespace std;
const int maxn=100100;
struct edge
e[maxn];
int in[maxn];
int num[maxn],sum=0;
vector p[maxn];
int head[maxn],len=0;
int dnf[maxn],low[maxn],index,cnt,n,m,tot;
int vis[maxn],s[maxn];//棧
void build(int x,int y)
void tarjan(int x)
else if(vis[e[i].y])
}if(low[x]==dnf[x])
while(x!=s[index+1]);
//printf("\n");
}}int main()
for(int i=1;i<=n;i++)
if(!dnf[i]) tarjan(i);
for(int i=1;i<=n;i++)
for(int j=head[i];j!=-1;j=e[j].next)//遍歷所有的邊,求縮點後所有點的出度
//cout
/*for(int i=1;i<=sum;i++)//測試用**
// cout
for(int j=0;jint flag=0,id=0;
for(int i=1;i<=sum;i++)
if(in[i]==0) flag++,id=i;
if(flag!=1)
cout<}
tarjan 模板 縮點
傳送門 首先呢,tarjan找乙個圖的強連通分量是基於對圖的dfs的。這中間開了乙個dfn代表dfs序,還有個low代表該節點在dfs形成的樹中能到達的最近的根。然後分情況進行更新 一會兒看我 吧 為了記錄乙個強聯通分量,我們還要在開乙個棧來儲存當前查詢的強連通分量。如果low x dfn x 那就...
學習 模板 tarjan縮點
我美好的早上就被tarjan毀掉了 微笑 放資料qwq謝謝你們讓我學會了tarjan 前兩個還是讓我了解了tarjan而最後乙個可就厲害了還讓我鞏固了topo sort dag 上的dp!學習筆記詳見注釋quq 1 include2 include3 include4 define maxn 100...
tarjan縮點 求橋模板
這麼一看縮點用tarjan也沒必要啊,用之前那個存反向邊dfs兩次的做法就行了 縮點過程就是遍歷邊,兩側不同scc就加邊 include pragma comment linker,stack 1024000000,1024000000 include include include include...