SGU - 321 - The Spy Network

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   os   io   strong   for   

先上題目:

321. The Spy NetworkTime limit per test: 0.5 second(s)
Memory limit: 65536 kilobytesinput: standard
output: standard




The network of spies consists of N intelligence officers. They are numbered with the code numbers from 1 to N so that nobody could discover them. The number 1 belongs to the radiowoman Kat. There is exactly N - 1 communication channels between the spies. It is known that a message from any spy to Kat can reach her. All channels are unidirectional.

A channel can have one of two types: protected and almost protected. It is known that a message will not be intercepted almost surely by the hostile security service if at least half of the channels along the path to radiowoman Kat are protected. What is the minimum number of channels to be made protected from almost protected, so that any message from any spy will not be intercepted almost surely ? What are those channels?

Input

The first line of the input contains the integer number N (1 ≤ N ≤ 200000). The following N - 1 lines contain the description of the communication channels. Each channel is described by a pair of the code numbers of spies (the direction of the channel is from the first spy to the second one) and the parameter pi. If pi = 

protected

, the channel is protected and if pi = 

almost protected

, the channel is almost protected.

Output

Write the number of channels to be converted to protected to the first line of the output. To the next line write numbers of channels to be made protected. If there are several solutions, choose any of them.

Example(s)
sample input
sample output
55 1 almost protected3 1 almost protected2 3 protected4 3 almost protected
21 2

 

 

 

    題意:給你一棵樹,樹的邊是有向的,每條邊有一個狀態0或者1,現在告訴你根是1,問你最少需要改變多少多少條邊的狀態才能使每個點到達跟的路徑上有一半以上的邊是1,並且輸出數目和這些邊的編號。

    做法:先從根節點dfs一次,對於記錄下每個節點還需要多少個1以及這個節點以及它的子樹中的節點最多需要1的節點需要1的數目。然後在從根節點再dfs一次,這次的目的是對於目前狀態為0的邊我們可以考慮是否將它轉化為1,因為對於這種轉化來說,轉移深度小的邊對樹的影響比轉移深度大的邊對樹的影響更大,所以我們如果一棵子樹裡面的節點還需要1的話,就轉換深度小的邊。也就是說這樣做符合貪心的思想。

 

上代碼:

 

 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define MAX 200002 5 using namespace std; 6  7 typedef struct { 8     int id,u,v,w,next; 9 } Edge;10 11 Edge e[MAX];12 char ch[100];13 int p[MAX],need[MAX],am[MAX];14 int tot,top;15 16 inline void add(int id,int u,int v,int w) {17     e[tot].id=id;18     e[tot].u=u;19     e[tot].v=v;20     e[tot].w=w;21     e[tot].next=p[u];22     p[u]=tot++;23 }24 25 void dfs1(int r,int dep,int a) {26     am[r]=(dep+1)/2 - a;27     for(int i=p[r]; i!=-1; i=e[i].next) {28         dfs1(e[i].v,dep+1,a+e[i].w);29         am[r]=max(am[e[i].v],am[r]);30     }31 }32 33 void dfs2(int r,int num) {34     for(int i=p[r]; i!=-1; i=e[i].next) {35         if(num<am[e[i].v]) {36             if(e[i].w==0) {37                 need[top++]=e[i].id;38                 dfs2(e[i].v,num+1);39             } else dfs2(e[i].v,num);40         }41     }42 }43 44 int main() {45     int n,u,v;46     //freopen("data.txt","r",stdin);47     while(~scanf("%d",&n)) {48         memset(p,-1,sizeof(p));49         tot=top=0;50         for(int i=1; i<n; i++) {51             scanf("%d %d %s",&v,&u,ch);52             if(ch[0]==‘a‘) {53                 scanf("%s",ch);54                 add(i,u,v,0);55             } else {56                 add(i,u,v,1);57             }58         }59         dfs1(1,0,0);60         dfs2(1,0);61         printf("%d\n",top);62         for(int i=0; i<top; i++) {63             if(i) printf(" ");64             printf("%d",need[i]);65         }66         printf("\n");67     }68     return 0;69 }
/*321*/

 

SGU - 321 - The Spy Network

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.