zoukankan      html  css  js  c++  java
  • 洛谷P3366 【模板】最小生成树(kuskal)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=5005;
     4 const int maxm=200005;
     5 struct node{
     6     int cnt,fa;
     7 }f[maxn];
     8 inline void read(int &tmp)
     9 {
    10     int x=1;char c=getchar();
    11     for(tmp=0;!isdigit(c);c=getchar()) if(c=='-') x=-1;
    12     for(;isdigit(c);tmp=tmp*10+c-48,c=getchar());
    13     tmp*=x;
    14 }
    15 int find(int x) {return f[x].fa==x?x:f[x].fa=find(f[x].fa);}
    16 void Union(int x,int y)
    17 {
    18     x=find(x),y=find(y);if(x==y) return;
    19     if(f[x].cnt<f[y].cnt) {f[x].fa=y;f[y].cnt+=f[x].cnt;}
    20     else {f[y].fa=x;f[x].cnt+=f[y].cnt;}
    21 }
    22 struct edge{
    23     int x,y,dis;
    24 }d[maxm];
    25 inline bool cmp (const edge &a,const edge &b) {return a.dis<b.dis;}
    26 int n,tot,m;
    27 int main()
    28 {
    29     read(n),read(m);
    30     for(int i=1;i<=n;i++) f[i].fa=i,f[i].cnt=1;
    31     for(int i=1;i<=m;i++) read(d[i].x),read(d[i].y),read(d[i].dis);
    32     sort(d+1,d+1+m,cmp);
    33     for(int i=1;i<=m;i++) 
    34     {
    35         if(f[find(1)].cnt==n) break;
    36         if(find(d[i].x)!=find(d[i].y)) 
    37         Union(d[i].x,d[i].y),tot+=d[i].dis;
    38     }
    39     if(f[find(1)].cnt!=n) printf("orz");
    40     else printf("%d",tot);
    41     return 0;
    42 }
  • 相关阅读:
    初识Comet技术
    巧用JS中的join方法操作字符串
    jquery load ($.load) 事件用法与分析(转)
    jQuery的Ajax操作小结——$.ajax和$.getJSON等用法小结
    lua c api
    __index
    lua 元表
    闭包实现迭代器
    lua 闭包
    select例子
  • 原文地址:https://www.cnblogs.com/yu-xing/p/10262048.html
Copyright © 2011-2022 走看看