題面:
本題中受歡迎的奶牛只有可能是圖中唯一的出度為零的強連通分量中的所有奶牛,所以若出現兩個以上出度為0的強連通分量則不存在明星奶牛,因為那幾個出度為零的分量的愛慕無法傳遞出去。唯一的分量能受到其他分量的愛慕同時在分量內相互傳遞,所以該分量中的所有奶牛都是明星。
code:
//kosaraju
#include#include#include#include#include#include#includeusing namespace std;
const int n=10005;
int n,m,cnt,head[n],rhead[n],t,rt,q[n],top,ans,rcnt,cnt[n],sum[n],number;
bool vis[n],rvis[n];
struct nodeedge[n];
struct rnoderedge[n];
void push(int u,int v)
void rpush(int u,int v)
void kosaraju(int u)
}q[++top]=u;
}void rkosaraju(int u)
else if(cnt[u]!=cnt[v])
}}int main()
for(int i=1;i<=n;i++)
}memset(vis,false,sizeof(vis));
memset(rvis,true,sizeof(rvis));
for(int i=n;i>=1;i--)
}for(int i=1;i<=t;i++)
}if(number!=1)
else
return 0;
}//tarjan
#include#include#include#include#include#include#includeusing namespace std;
const int n=50005;
int n,m,cnt,head[n],dfn[n],low[n],t,q[n],top,number,num[n],sum,ans,cnt[n],last[n];
bool vis[n];
struct nodeedge[n];
void push(int u,int v)
void tarjan(int u)
if(vis[v])
}if(dfn[u]==low[u])
}}int main()
for(int i=1;i<=n;i++)
}for(int i=1;i<=n;i++)}}
for(int i=1;i<=sum;i++)
}if(number>1)
else
return 0;
}
P2341 受歡迎的牛
每頭奶牛都夢想成為牛棚裡的明星。被所有奶牛喜歡的奶牛就是一頭明星奶牛。所有奶 歡b,b喜歡c,那麼a也喜歡c。牛欄裡共有n 頭奶牛,給定一些奶牛之間的愛慕關係,請你 算出有多少頭奶牛可以當明星。第一行 兩個用空格分開的整數 n和m 第二行到第m 1行 每行兩個用空格分開的整數 a和b,表示a喜歡b ...
P2341 受歡迎的牛
這是一道不是很好想的tarjan模版題 有一點小改動 但是要是沉下心好好思考,是可以發現其中的規律的。主體部分還是跑tarjan,就是要維護乙個am來記錄這個顏色的強連通分量裡元素的數量,並且不要忘記把u從棧裡刪掉的時候也要修改am 真難發現啊 另外要明白,最受歡迎的牛一定就是那個出度為0的那個強連...
洛谷 P2341 受歡迎的牛
畫一張圖形象一下 tarjan演算法模板,這裡用於縮點 1931 else if col k 3235 36 if low u dfn u 3746 pru.pop 47 48return 49 50signed main 5158 for register int i 1 i n i 5964 6...