今天的第二道tarjan 受歡迎的牛

2022-04-01 06:02:26 字數 1398 閱讀 9004

原題來自:usaco 2003 fall

第一行:兩個用空格分開的整數:nnn 和 mmm。

接下來 mmm 行:每行兩個用空格分開的整數:aaa 和 bbb,表示 aaa 喜歡 bbb。

一行單獨乙個整數,表示明星奶牛的數量。

輸入 #1

3 3

1 22 1

2 3

輸出 #1

1
只有 3號奶牛可以做明星。

emmmm

這是一到極為經典的,似乎是這一類題的模板的題目:縮點

縮點,也是tarjan的極大的乙個作用。

縮點只對強聯通分量有用,因為強聯通分量中的點可以互相到達,可以被視為乙個點。

這題,是肯定是有環的。

那麼肯定是很不好去實現遍歷的。

怎麼辦呢?

根據常識,環上的點肯定都在同乙個強聯通分量中。

強聯通分量 -->縮點

經過縮點的圖,一定是乙個有向無環圖

那麼只需要乙個dfs就好了啊awa

簡單題awa

淦,題解寫完了,**還沒寫。。。

等等我寫完**awa

#include#define ll long long

using

namespace

std;

struct

edge

e[1000001

];int head[1000001],n,m,w[1000001],tot,ccs,dfsc,low[1000001],dfn[1000001],color[10000001],cnt[1000001],de[1000001],all[1000001];bool vis[1000001

];stack

stk;

inline ll read()

void add(int i,int

j)void tarjan(int x,int

fa)

else

if(vis[u]==true

)

}if(dfn[x]==low[x])

while(x!=k);

}}int

main()

for(int i=1;i<=n;i++)

}//for(int i=1;i<=n;i++)

//for(int i=1;i<=n;i++)}}

int ans=0,sum=0;bool tt=0

;

for(int i=1;i<=ccs;i++)

tt=i;}}

cout

return0;

}

n年前的草稿總算是發布了awa

tarjan 受歡迎的牛

題 既然愛慕關係可以傳遞,那麼將互相可達的某幾個點縮成乙個點,就能簡化原圖了,那麼很自然想到tarjan求強連通分量 那麼就只需找到可以被所有縮點遍歷到的那個縮點 再輸出它所含的點數就行了 先用tarjan將所有聯通分量進行縮點,縮點後考慮出度為0的點的個數 1 個數大於1的時候,顯然不存在受歡迎的...

受歡迎的牛(tarjan)

題目連線 每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。第一行兩個數n,m。接下來m行,每行兩個數a,b,意思...

受歡迎的牛 Tarjan

每一頭牛的願望就是變成一頭最受歡迎的牛。現在有 頭牛,給你 對整數 表示牛 認為牛 受歡迎。這種關係是具有傳遞性的,如果 認為 受歡迎,認為 受歡迎,那麼牛 也認為牛 受歡迎。你的任務是求出有多少頭牛被除自己之外的所有牛認為是受歡迎的。輸入格式 第一行兩個數 接下來 行,每行兩個數 意思是 認為 是...