COGS——C 908. 校園網 || 洛穀——P 2746 [USACO5.3]校園網Network of Schools

來源:互聯網
上載者:User

標籤:它的   href   file   時間   cst   電腦   oid   can   str   

http://www.cogs.pro/cogs/problem/problem.php?pid=908   ||  https://www.luogu.org/problem/show?pid=2746

★★   輸入檔案:schlnet.in   輸出檔案:schlnet.out   簡單對比
時間限制:1 s   記憶體限制:128 MB

USACO/schlnet(譯 by Felicia Crazy)

描述

一些學校連入一個電腦網路。那些學校已訂立了協議:每個學校都會給其它的一些學校分發軟體(稱作“接受學校”)。注意如果 B 在 A 學校的分發列表中,那麼 A 不必也在 B 學校的列表中。

你要寫一個程式計算,根據協議,為了讓網路中所有的學校都用上新軟體,必須接受新軟體副本的最少學校數目(子任務 A)。更進一步,我們想要確定通過給任意一個學校發送新軟體,這個軟體就會分發到網路中的所有學校。為了完成這個任務,我們可能必須擴充接收學校列表,使其加入新成員。計算最少需要增加幾個擴充,使得不論我們給哪個學校發送新軟體,它都會到達其餘所有的學校(子任務 B)。一個擴充就是在一個學校的接收學校列表中引入一個新成員。

PROGRAM NAME: schlnetINPUT FORMAT (file schlnet.in)

輸入檔案的第一行包括一個整數 N:網路中的學校數目(2 <= N <= 100)。學校用前 N 個正整數標識。接下來 N 行中每行都表示一個接收學校列表(分發列表)。第 i+1 行包括學校 i 的接收學校的標識符。每個列表用 0 結束。空列表只用一個 0 表示。

 

OUTPUT FORMAT(file schlnet.out)

你的程式應該在輸出檔案中輸出兩行。第一行應該包括一個正整數:子任務 A 的解。第二行應該包括子任務 B 的解。

 

SAMPLE INPUT (file schlnet.in)


2 4 3 0
4 5 0
0

1 0

SAMPLE OUTPUT (file schlnet.out)
1

 

2

 

 

A: 縮點後入度為零的點;B:縮點後出度為零的點和(縮點後的點數-入讀為零的點的個數)取MAX

特判只有一個連通塊的的時候

 1 #include <algorithm> 2 #include <cstdio> 3  4 using namespace std; 5  6 const int N(110*110); 7 int n,ans_a,ans_b,cnt; 8  9 int head[N],sumedge;10 struct Edge11 {12     int v,next;13     Edge(int v=0,int next=0): v(v),next(next){}14 }edge[N];15 void ins(int u,int v)16 {17     edge[++sumedge]=Edge(v,head[u]);18     head[u]=sumedge;19 }20 21 int tim,dfn[N],low[N];22 int top,Stack[N],instack[N];23 int sumcol,col[N],rd[N],cd[N],point[N];24 void DFS(int now)25 {26     dfn[now]=low[now]=++tim;27     Stack[++top]=now; instack[now]=1;28     for(int i=head[now];i;i=edge[i].next)29     {30         int v=edge[i].v;31         if(!dfn[v]) DFS(v),low[now]=min(low[now],low[v]);32         else if(instack[v]) low[now]=min(low[now],dfn[v]);33     }34     if(low[now]==dfn[now])35     {36         col[now]=++sumcol;37         point[sumcol]++;38         for(;Stack[top]!=now;top--)39         {40             col[Stack[top]]=sumcol;41             point[sumcol]++;42             instack[Stack[top]]=0;43         }44         instack[now]=0; top--;45     }46 }47 48 int main()49 {50 //    freopen("schlnet.in","r",stdin);51 //    freopen("schlnet.out","w",stdout);52     scanf("%d",&n);53     for(int u=1;u<=n;u++)54         for(int v;scanf("%d",&v)&&v;) ins(u,v);55     for(int i=1;i<=n;i++)56         if(!dfn[i]) DFS(i);57     for(int u=1;u<=n;u++)58     {59         for(int i=head[u];i;i=edge[i].next)60         {61             int v=edge[i].v;62             if(col[u]==col[v]) continue;63             if(!rd[col[v]]) cnt++;64             cd[col[u]]++; rd[col[v]]++;65         }66     }    67     for(int i=1;i<=sumcol;i++)68     {69         if(!rd[i]) ans_a++;70         if(!cd[i]) ans_b++;71     } ans_b=max(ans_b,sumcol-cnt);72     if(sumcol==1) ans_b=0;73     printf("%d\n%d",ans_a,ans_b);74     return 0;75 }

 

COGS——C 908. 校園網 || 洛穀——P 2746 [USACO5.3]校園網Network of Schools

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.