BZOJ 1051 最受歡迎的牛 解題報告

2021-09-08 07:44:39 字數 2022 閱讀 1120

題目直接擺在這裡!

time limit: 10 sec  memory limit: 162 mb

submit: 4438  solved: 2353

[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

[submit][status][discuss]

這道題和codevs2822愛在心中類似,也是一道tarjan練手題,所以具體的tarjan板子我就不再貼出來了。

這道題的思路也可以和codevs2822一樣的,使用tarjan+spfa,但是由於本人太懶,不想再打140行**,就換了另一種思路。

正解:tarjan縮點

具體做法:

第一步,先讀入資料建邊;

第二步,開始跑tarjan,別忘記在tarjan過程中要縮點,接下來的過程要用到。(所謂縮點,就是把每個點都歸到乙個強聯通塊裡面,對強聯通塊進行操作)

第三步:根據m個邊的關係,統計每個強聯通塊的出度。

第四步:統計出度為0的強聯通塊的個數,若為1,則輸出次強聯通塊組成元素個數,否則輸出0。(這裡才是這道題目核心的思想,想一想為什麼,其實很簡單)。

先貼上**(建議大家不要用vector這種東西,資料結構盡量手寫)

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8

using

namespace

std;

9int

get_num()

21const

int maxn = 1e4 + 5;22

const

int maxm = 5e4 + 5;23

intn,m,h[maxn],sccno[maxn],scc_cnt,id[maxn],sum,r[maxn],dfn[maxn],low[maxn],dfs_clock,ans,pos;

24 stacks;

25struct

edgeedges[maxm << 1

];28

void addedge(int u,int

v)34

void

init()

45void tarjan(int

u)54

else

if(!id[e.to])

55 low[u] =min(low[u],dfn[e.to]);56}

57if(low[u] ==dfn[u])66}

67return;68

}69void

find_tarjan()

74return;75

}76intmain()

86find_tarjan();

87for(int i = 0;i < sum;++i)

93 ans = 0;94

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

102}

103}

104 printf("

%d\n

",ans);

105return0;

106 }

這次解題報告就寫到這裡吧,noip倒計時兩個月,祝大家能考個好成績!

posted @

2016-09-19 21:27

小鋼釘丶coding 閱讀(

...)

編輯收藏

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受歡迎...