Poj 3164 Command Network

來源:互聯網
上載者:User

標籤:失敗   ttl   root   while   detail   cst   細節   演算法   破壞   

描述
一種文字持久的戰爭後,對武器的戰爭終於爆發了littleken之間和KnuthOcean的王國。突然和猛烈攻擊KnuthOcean的部隊已呈現littleken指揮網路徹底失敗。必須馬上建立臨機操作網路。littleken訂單史努比項目負責。
這種情況對每一個細節,史努比認為,當務之急是使littenken的命令到達每一個斷開的節點在破壞網路和決定計劃建立一個單向通訊網路。節點分布在一個平面上。如果littleken的命令可以直接傳送從一個節點到另一個節點B,

電線要沿直線段串連的兩個節點建立。因為這是在戰時,沒有之間的所有節點對CAN線建成。史努比想要計劃要求導線的最短的總長度,建設可以很快完成。

輸入
輸入包含多個測試案例。每個測試案例的第一行包含兩個整數n(n≤100),在摧毀網路節點數,和M(M≤104),數量的節點對之間的導線,可建。下一行n包含一對有序的XI和易,

給出節點的笛卡爾座標。

然後按照mlines每個都包含兩個整數i和j之間的1和n(含)意義的線可以結我與節點j為前者對後者的單向的命令傳遞之間建立。littleken總部都位於節點1。進程到檔案結束。
輸出
對於每個測試案例,輸出一行,其中包含最短的總長度到小數點後兩位元的總長度。

題解:

最小樹形圖模板題,直接跑朱劉演算法

朱劉演算法:http://blog.csdn.net/wsniyufang/article/details/6747392

這一題沒有什麼別的

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 struct Node 8 { 9     int u,v;10     double dis;11 }edge[20001];12 int n,m;13 double X[10001],Y[10001],ans,in[10001];14 int pre[10001],vis[10001],id[10001];15 void add(int u,int v,double d,int num)16 {17     edge[num].u=u;18     edge[num].v=v;19     edge[num].dis=d;20 }21 int main()22 {int i,j,u,v,root;23 //freopen("canal0.in","r",stdin);24 //freopen("canal.out","w",stdout);25     cin>>n>>m;26      for (i=1;i<=n;i++)27      {28          scanf("%lf%lf",&X[i],&Y[i]);29      }30      for (i=1;i<=m;i++)31      {32          scanf("%d%d",&u,&v);33          add(u,v,sqrt((X[u]-X[v])*(X[u]-X[v])+(Y[u]-Y[v])*(Y[u]-Y[v])),i);34      }35      ans=0;root=1;36       while (1)37       {//cout<<root<<endl;38           memset(in,127,sizeof(in));39            for (i=1;i<=m;i++)40            if (edge[i].u!=edge[i].v&&edge[i].dis<in[edge[i].v])41            {42                in[edge[i].v]=edge[i].dis;43                pre[edge[i].v]=edge[i].u;44          }45          in[root]=0;46          int cnt=0;47          memset(id,-1,sizeof(id));48         memset(vis,-1,sizeof(vis));49           for (i=1;i<=n;i++)50           {51               ans+=in[i];52                v=i;53                while (vis[v]!=i&&id[v]==-1&&v!=root)54                {55                    vis[v]=i;56                    v=pre[v];57              }58               if (id[v]==-1&&v!=root)59               {60                   id[v]=++cnt;61                    for (j=pre[v];j!=v;j=pre[j]) id[j]=cnt;62               }63           }64            if (cnt==0) break;65            for (i=1;i<=n;i++) 66            if (id[i]==-1) id[i]=++cnt;67             for (i=1;i<=m;i++)68             {69                 int v=edge[i].v;70                 edge[i].u=id[edge[i].u];71                 edge[i].v=id[edge[i].v];72                 if (edge[i].u!=edge[i].v) edge[i].dis=edge[i].dis-in[v];73             }74         n=cnt;75         root=id[root];76       }77     printf("%.2lf",ans);78 }

 

Poj 3164 Command 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.