【LA 3027 Corporative Network】

來源:互聯網
上載者:User

標籤:amp   size   輸入   表示   ati   並且   network   strong   scan   

·一些很可愛的詢問和修改,放鬆地去用並查集解決。

·英文題,述大意:

輸入n(5<=n<=20000)表示樹有n個節點,並且會EOF結束地讀入不超過 20000個操作,一共有兩種:

   ①I v u:表示將v的父親節點設定為u(在這之前v沒有爸爸),邊權設定為abs(v-u)%1000。

   ②E u:表示詢問u到當前它所在樹的根節點的距離。

·分析:

     為了記錄當前一系列加邊操作後所有的點的位置情況(因為你隨時可能回答詢問啊),根據這道題的點關係特點[只在乎點和其根節點的資訊],我們選擇並查集來加以維護。

     然後我們只需要在標準的FindFather函數的回溯過程裡面加入邊權的累積,這樣一次函數就可以既完成路徑壓縮,又維護了沿途所有點各自到根節點的距離(就是邊權和)。

     然後這麼短的題解讓我想起了網路上的人們常常使用的一句題解推託之詞:“哎呀,其他的搞一搞就出來了”。但是這道題真是這麼單純。OK。

 

 1 #include<stdio.h> 2 #define go(i,a,b) for(int i=a;i<=b;i++) 3 int T,n,fa[20004],d[20004];char c; 4 int A(int a){return a>0?a:-a;} 5 int find(int u) 6 { 7     if(u==fa[u])return u;int Fa=find(fa[u]); 8     d[u]+=d[fa[u]];return fa[u]=Fa; 9 }10 int main()11 {12     scanf("%d",&T);while(T--&&scanf("%d",&n))13     {14         go(u,1,n)d[fa[u]=u]=0;int u,v;15         while(scanf(" %c",&c),c!=‘O‘)16         {17             if(c==‘I‘)scanf("%d%d",&v,&u),fa[v]=u,d[v]=A(v-u)%1000;18             if(c==‘E‘)scanf("%d",&u),fa[u]=find(u),printf("%d\n",d[u]);19         }20     }21     return 0;22 }//Paul_Guderian

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

明天當孤獨襲來時我不會再流一滴淚,
我會用歌聲抹去那創痛的灰燼。—————汪峰《明天》

【LA 3027 Corporative 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.