P2835 燒錄光碟 (tarjan縮點)

2022-05-23 16:54:12 字數 976 閱讀 1739

【題目描述】

現在假設總共有n個營員(2<=n<=200),每個營員的編號為1~n。lhc給每個人發了一張調查表,讓每個營員填上自己願意讓哪些人到他那兒拷貝資料。當然,如果a願意把資料拷貝給b,而b又願意把資料拷貝給c,則一旦a獲得了資料,則b,c都會獲得資料。求最小需要燒錄多少張光碟。

【題目鏈結】

【演算法】

tarjan縮點再求度數為1的點的個數。縮點後,每個強連通分量視作乙個點,分量內的邊不考慮,其餘邊相當於使指向的點(分量)度數加一。

【**】

1 #include 2

using

namespace

std;

3struct edgee[40010];4

intn,tot,num,top,cnt,ans;

5int head[210],stk[210],low[210],dfn[210],ins[210],c[210];6

bool v[210];7

void add(int

from,int

to)8

12void tarjan(int

x)13

else

if(ins[to])

22 low[x]=min(low[x],low[to]);23}

24if(dfn[x]==low[x]) while(x!=y);30}

31}32int

main()

3339

for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);

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

47for(int i=1;i<=cnt;i++)

48if(!v[i]) ans++;

49 printf("

%d\n

",ans);

50return0;

51 }

洛谷 P2835 燒錄光碟

這道題目 先把沒有入度的點去灌水一遍 然後對於剩下的每乙個圖 他們不一定是乙個環 但是一定包含乙個環 我們只要找到乙個在環上的點,那麼就可以吧整個圖都灌水 include define ll long long using namespace std const int n 205 struct c...

洛谷P2835燒錄光碟

在jsoi2005夏令營快要結束的時候,很多營員提出來要把整個夏令營期間的資料燒錄成一張光碟給大家,以便大家回去後繼續學習。組委會覺得這個主意不錯!可是組委會一時沒有足夠的空光碟,沒法保證每個人都能拿到燒錄上資料的光碟,又來不及去買了,怎麼辦呢?組委會把這個難題交給了lhc,lhc分析了一下所有營員...

洛谷 P2835 燒錄光碟

其實這題水的一批.在jsoi2005夏令營快要結束的時候,很多營員提出來要把整個夏令營期間的資料燒錄成一張光碟給大家,以便大家回去後繼續學習。組委會覺得這個主意不錯!可是組委會一時沒有足夠的空光碟,沒法保證每個人都能拿到燒錄上資料的光碟,又來不及去買了,怎麼辦呢?組委會把這個難題交給了lhc,lhc...