zoukankan      html  css  js  c++  java
  • HDU 1598 find the most comfortable road

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

    题意:中文题

    题解:枚举+最小生成树(Kruskal)。对于每个要查询的s,e,枚举边。总是忘记minn初始化……

      1 #include <iostream>
      2 #include <cstring>
      3 #include <cstdio>
      4 #include <cstdlib>
      5 #include <cmath>
      6 #include <string>
      7 #include <vector>
      8 #include <list>
      9 #include <map>
     10 #include <queue>
     11 #include <stack>
     12 #include <bitset>
     13 #include <algorithm>
     14 #include <numeric>
     15 #include <functional>
     16 #include <set>
     17 #include <fstream>
     18 
     19 using namespace std;
     20 
     21 const int INF=0xfffffff;
     22 const int maxn=2010;
     23 
     24 int N,M;
     25 int V,E;
     26 
     27 int par[maxn];
     28 int rankh[maxn];
     29 struct edge{
     30     int u,v,cost;
     31 };
     32 edge es[maxn];
     33 
     34 bool cmp(const edge& e1,const edge& e2)
     35 {
     36     return e1.cost<e2.cost;
     37 }
     38 
     39 void init(int n)
     40 {
     41     for(int i=0;i<=n;i++)
     42     {
     43         par[i]=i;
     44         rankh[i]=0;
     45     }
     46 }
     47 
     48 int find(int x)
     49 {
     50     if(par[x]==x)
     51     {
     52         return x;
     53     }
     54     else{
     55         return par[x]=find(par[x]);
     56     }
     57 }
     58 
     59 /*int find(int x)
     60 {
     61     while(x!=par[x]) x=par[x];
     62     return x;
     63 }*/
     64 
     65 void unite(int x,int y)
     66 {
     67     x=find(x);
     68     y=find(y);
     69     if(x==y) return;
     70     if(rankh[x]<rankh[y]){
     71         par[x]=y;
     72     }
     73     else{
     74         par[y]=x;
     75         if(rankh[x]==rankh[y]) rankh[x]++;
     76     }
     77 }
     78 
     79 bool same(int x,int y)
     80 {
     81     return find(x)==find(y);
     82 }
     83 
     84 int main()
     85 {
     86     //freopen("/Users/apple/Desktop/暑假/10/10/in","r",stdin);
     87     while(scanf("%d%d",&N,&M)!=EOF)
     88     {
     89         V=N;
     90         E=M;
     91         int minn;
     92         for(int i=0;i<M;i++)
     93         {
     94             scanf("%d%d%d",&es[i].u,&es[i].v,&es[i].cost);
     95             // printf("%d %d %d 
    ",es[i].u,es[i].v,es[i].cost);
     96         }
     97         //   puts("asdfghjkl");
     98         sort(es,es+E,cmp);
     99         //   for(int i=0;i<M;i++)
    100         //   {
    101         //       printf("%d %d %d 
    ",es[i].u,es[i].v,es[i].cost);
    102         //   }
    103         int Q;
    104         scanf("%d",&Q);
    105         while(Q--)
    106         {
    107             int s,e;
    108             scanf("%d%d",&s,&e);
    109             minn=INF;
    110             for(int i=0;i<E;i++)
    111             {
    112                 init(V);
    113                 for(int j=i;j<E;j++)
    114                 {
    115                     int a=find(es[j].u);
    116                     int b=find(es[j].v);
    117                     if(a!=b) unite(a,b);
    118                     if(find(s)==find(e))
    119                     {
    120                         minn=min(minn,es[j].cost-es[i].cost);
    121                         //printf("%d ",minn);
    122                         break;
    123                     }
    124                 }
    125             }
    126             if(minn==INF) puts("-1");
    127             else printf("%d
    ",minn);
    128             //puts("");
    129         }
    130 
    131     }
    132     
    133     return 0;
    134 }
  • 相关阅读:
    with
    网编
    选课新系统大作业
    网络编程

    知识点
    Python
    学生选课大作业
    理解position与anchorPoint[转]
    毛玻璃效果的简单使用
  • 原文地址:https://www.cnblogs.com/der-z/p/3857799.html
Copyright © 2011-2022 走看看