BZOJ 1051 HAOI2006 受歡迎的牛

2022-05-23 02:27:09 字數 1518 閱讀 9597

time limit: 10 sec  memory limit: 162 mb

submit: 2909  solved: 1532

[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 2

2 12 3

1100%的資料n<=10000,m<=50000

題解:抽象成有向圖,縮點後乙個點能被所有點訪問到的充要條件是出度為一且唯一(呵呵。。。)。。。輸出這個大點的數量就行。

1 #include2 #include3 #include4 #include5 #include6 #include7

#define pau putchar(' ')

8#define ent putchar('\n')

9using

namespace

std;

10const

int maxn=100000+10,maxm=500000+10;11

int low[maxn],dfn[maxn],s[maxn],beg[maxn],top,scc,cz,indeg[10001],outdeg[10001];bool

ins[maxn];

12struct tedadj[maxm],*fch[maxn],*ms=adj;

13void add(int x,int y);fch[x]=ms++;return

;}14

void tarjan(int

u)if(low[u]==dfn[u])return;22

}23 inline int

read()

26while(isdigit(ch))x=10*x+ch-'

0',ch=getchar();

27return x*=sig;28}

29 inline void write(int

x)if(x<0)putchar('

-'),x=-x;

31int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;32

for(int i=len-1;i>=0;i--)putchar(buf[i]+'

0');return;33

}34void

count_edge()return;39

}40intn,m;

41void

init()

54return;55

}56void

work()

59void

print()

62int main()

BZOJ1051 HAOI2006受歡迎的牛

請原諒我,這題實在和bzoj1093太像 了,copy過來改一改,很多沒有用,然後一起嘿嘿嘿 include include include include include include include using namespace std typedef long long ll inline...

bzoj1051 HAOI2006 受歡迎的牛

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

bzoj1051 HAOI2006 受歡迎的牛

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