• HDU 1879 继续畅通工程


    Portal:http://acm.hdu.edu.cn/showproblem.php?pid=1879

    。。。畅通工程没完没了了

    kruskal+并查集

    又给出了所有村庄间的距离,保证所有村庄在一个强连通分量里,所以直接kruskal

    建好的路建造代价为0

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<set>
     4 #include<cstdio>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<vector>
     8 using namespace std;
     9 #define FOR(i,j,k) for(int i=j;i<=k;i++)
    10 #define FORD(i,j,k) for(int i=j;i>=k;i--)
    11 #define LL long long
    12 #define maxnn 10110
    13 #define maxn 110
    14 struct edge{int u,v,cost;};
    15 edge bb[maxnn];
    16 int father[maxn],val[maxn];
    17 int n,x,y,z,q,k,ans;
    18 void setinit()
    19 {
    20     FOR(i,1,n)
    21     {father[i]=i; val[i]=1;}
    22 }
    23 int setfind(int x)
    24 {
    25     int fa=father[x];
    26     if(fa==x) return x;
    27     else return father[x]=setfind(fa);
    28 }
    29 bool setunion(int xx,int yy)
    30 {
    31     int XX=setfind(xx);
    32     int YY=setfind(yy);
    33     if(XX==YY) return false;
    34     if(val[XX]>val[YY]) father[YY]=XX;
    35     else father[XX]=YY;
    36     if(val[XX]=val[YY]) val[XX]++;
    37     return true;
    38 }
    39 bool cmp1(edge a,edge b)
    40 {
    41     return a.cost<b.cost;
    42 }
    43 void kruskal()
    44 {
    45     sort(bb+1,bb+k+1,cmp1);
    46     FOR(i,1,k)
    47     if(setunion(bb[i].u,bb[i].v)) ans+=bb[i].cost;
    48 }
    49 int main()
    50 {
    51 for(cin>>n;n!=0;cin>>n)
    52 {
    53     k=n*(n-1)/2;
    54     FOR(i,1,n*(n-1)/2)    
    55     {
    56         scanf("%d%d%d%d",&x,&y,&z,&q);
    57         bb[i].u=x;
    58         bb[i].v=y;
    59         if(q) bb[i].cost=0;
    60         else bb[i].cost=z;
    61     }
    62     setinit();
    63     ans=0;
    64     kruskal();
    65     cout<<ans<<endl;
    66 }
    67 return 0;
    68 }
    1233的代码改一改交上去就AC了
  • 相关阅读:
    8.1.3 CSS3选择器 —— 伪类
    8.1.2 CSS3选择器 —— 结构性伪类
    VI打开和编辑多个文件的命令
    vi全局替换方法
    更改Ubuntu 12.04默认的shel
    如何区分直连串口线和交叉串口线?
    [转]OpenWrt的dl下载地址
    关闭 ubuntu System program problem detected
    linuxC学习
    aa
  • 原文地址:https://www.cnblogs.com/mukoiaoi/p/5645303.html
Copyright © 2020-2023  润新知