zoukankan      html  css  js  c++  java
  • 洛谷1550 打井

    洛谷1550 打井
    找一个数组来存以x为根的树的最小值,所有边按从小到大排序,
    如果e[i].v<=Min[t1]||....(见代码

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<queue>
      4 #include<algorithm>
      5 #include<cmath>
      6 #include<ctime>
      7 #include<set>
      8 #include<map>
      9 #include<stack>
     10 #include<cstring>
     11 #define inf 2147483647
     12 #define ls rt<<1
     13 #define rs rt<<1|1
     14 #define lson ls,nl,mid,l,r
     15 #define rson rs,mid+1,nr,l,r
     16 #define N 100010
     17 #define For(i,a,b) for(int i=a;i<=b;i++)
     18 #define p(a) putchar(a)
     19 #define g() getchar()
     20 
     21 using namespace std;
     22 
     23 int n,x,cnt,num;
     24 int a[310];
     25 int b[310][310];
     26 int d[310],Min[310];
     27 int ans;
     28 
     29 struct kru{
     30     int l;
     31     int r;
     32     int v;
     33     bool operator < (const kru &temp)const{
     34         return v<temp.v;
     35     }
     36 }e[90010];
     37 
     38 void in(int &x){
     39     int y=1;
     40     char c=g();x=0;
     41     while(c<'0'||c>'9'){
     42         if(c=='-')y=-1;
     43         c=g();
     44     }
     45     while(c<='9'&&c>='0'){
     46         x=(x<<1)+(x<<3)+c-'0';c=g();
     47     }
     48     x*=y;
     49 }
     50 void o(int x){
     51     if(x<0){
     52         p('-');
     53         x=-x;
     54     }
     55     if(x>9)o(x/10);
     56     p(x%10+'0');
     57 }
     58 
     59 int find(int x){
     60     if(d[x]==x)return x;
     61     return d[x]=find(d[x]);
     62 }
     63 
     64 int main(){
     65     in(n);
     66     For(i,1,n){
     67         d[i]=i;
     68         in(a[i]);
     69         Min[i]=a[i];
     70     }
     71     For(i,1,n)
     72         For(j,1,n){
     73             in(x);
     74             if(i<j){
     75                 e[++cnt].l=i;
     76                 e[cnt].r=j;
     77                 e[cnt].v=x;
     78             }
     79         }
     80     sort(e+1,e+cnt+1);
     81     For(i,1,cnt){
     82         int t1=find(e[i].l);
     83         int t2=find(e[i].r);
     84         if(t1!=t2&&e[i].v<=max(Min[t1],Min[t2])){
     85             if(e[i].v<=Min[t1]&&e[i].v>=Min[t2]){
     86                 Min[t1]=Min[t2];
     87                 ans+=e[i].v;
     88                 d[t1]=t2;
     89             }
     90             else 
     91                 if(e[i].v>=Min[t1]&&e[i].v<=Min[t2]){
     92                 Min[t2]=Min[t1];
     93                 ans+=e[i].v;
     94                 d[t2]=t1;
     95             }
     96             else
     97                 if(e[i].v<min(Min[t1],Min[t2])){
     98                     if(Min[t1]>=Min[t2]){
     99                         Min[t1]=Min[t2];
    100                         ans+=e[i].v;
    101                         d[t1]=t2;
    102                     }
    103                     else{
    104                         Min[t2]=Min[t1];
    105                         ans+=e[i].v;
    106                         d[t2]=t1;
    107                     }
    108                 }
    109                 num++;
    110         }
    111         if(num==n-1)break;
    112     }
    113     For(i,1,n)
    114         if(d[i]==i)
    115             ans+=a[i];
    116     o(ans);
    117     return 0;
    118 }
    View Code
  • 相关阅读:
    Haskell 差点儿无痛苦上手指南
    HighCharts 具体使用及API文档说明
    又一道软通动力7K月薪面试题——银行业务调度系统
    [AngularJS + Webpack] require directives
    [AngularJS + Webpack] Using Webpack for angularjs
    [Whole Web] [AngularJS] Localize your AngularJS Application with angular-localization
    [React] React Fundamentals: Mixins
    [React] React Fundamentals: Component Lifecycle
    [React ] React Fundamentals: Component Lifecycle
    [React] React Fundamentals: Component Lifecycle
  • 原文地址:https://www.cnblogs.com/war1111/p/10324907.html
Copyright © 2011-2022 走看看