time limit: 10 sec memory limit: 162 mb
submit: 4573 solved: 2428
[submit][status][discuss]
每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數(a,b),表示牛a認為牛b受歡迎。 這
種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭
牛被所有的牛認為是受歡迎的。
第一行兩個數n,m。 接下來m行,每行兩個數a,b,意思是a認為b是受歡迎的(給出的資訊有可能重複,即有可
能出現多個a,b)
乙個數,即有多少頭牛被所有的牛認為是受歡迎的。
3 31 22 1
2 31
100%的資料n<=10000,m<=50000
做法:tarjan縮點後,由於縮點後必定是乙個dag或者叫有向無環圖,因此應該至少存在乙個出度為0的縮點和乙個入度為0的縮點,這題就是要統計出度為0的分量個數
若統計的數量有為1個,則說明全在乙個連通分量內,即任意兩點互相可達,所有牛都是受歡迎的;若大於1,則說明至少乙個連通分量中的牛的數量少於n-1即歡迎不能直接或間接地全部集中在至少一頭牛身上,就沒有牛受歡迎了
**:
#include #include using namespace std;#define inf 0x3f3f3f3f
#define clr(arr,val) memset(arr,val,sizeof(arr))
#define lc(x) (x<<1)
#define rc(x) ((x<<1)+1)
#define mid(x,y) ((x+y)>>1)
typedef pairpii;
typedef long long ll;
const double pi=acos(-1.0);
const int n=10010;
const int m=50010;
struct edge
;edge e[m];
int head[n],tot;
int dfn[n],low[n],st[n],belong[n],ins[n],sc,ts,top,scnum[n];
int out[n];
void init()
inline void add(int s,int t)
void tarjan(int u)
return 0;
}
BZOJ 1051, 受歡迎的牛
傳送門 求可以被除自己以外所有點遍歷到的點的個數。首先強連通分量跑一遍,縮點之後統計每個強連通分量 可以視為乙個點 的出度。如果有多個出度大於0,則無解 否則輸出唯一出度為0的強連通分量內點的個數。include const int n 10005,m 50005 int n,m,x,y,i,j,t...
bzoj1051 受歡迎的牛
每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎,那麼牛a也認為牛c受歡迎。你的任務是求出有多少頭牛被所有的牛認為是受歡迎的。第一行兩個數n,m。接下來m行,每行兩個數a,b,意思是a認為b...
bzoj1051 受歡迎的牛(tarjan)
1051 haoi2006 受歡迎的牛 time limit 10 sec memory limit 162 mb description 每一頭牛的願望就是變成一頭最受歡迎的牛。現在有n頭牛,給你m對整數 a,b 表示牛a認為牛b受歡迎。這 種關係是具有傳遞性的,如果a認為b受歡迎,b認為c受歡迎...