• hdu 1598 find the most comfortable road


    贪心+并查集

    fighting~~~~~!!

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cmath>
     4 #include<cstdio>
     5 using namespace std;
     6 #define maxn 300
     7 #define INF 0x3fffffff
     8 int par[maxn];
     9 int n,m;
    10 
    11 struct node
    12 {
    13     int x;
    14     int y;
    15     int w;
    16 };
    17 node e[maxn * maxn / 2];
    18 int cmp(const node& a,const node &b)
    19 {
    20     return a.w < b.w;
    21 }
    22 void init()
    23 {
    24     for(int i = 1; i <= n; i++)
    25         par[i] = i;
    26 }
    27 int Find(int x)
    28 {
    29     int t,r,k;
    30     k = x;
    31     while(x != par[x])
    32         x = par[x];
    33     while(k != x)//tanta
    34     {
    35         t = par[k];
    36         par[k] = x;
    37         k = t;
    38     }
    39     return x;
    40 }
    41 void Merge(int x,int y)
    42 {
    43     int a = Find(x);
    44     int b = Find(y);
    45     if(a != b)
    46     {
    47         par[a] = b;
    48     }
    49 }
    50 void kruskal()
    51 {
    52     int q,st,en,mindis,i,j;
    53     while(cin>>n>>m)
    54     {
    55         for(int i = 0; i < m; i++)
    56             cin>>e[i].x>>e[i].y>>e[i].w;
    57         sort(e,e+m,cmp);
    58         cin>>q;
    59         while(q--)
    60         {
    61             cin>>st>>en;
    62             mindis = INF;
    63             for(i = 0; i < m ; i++)//meijuzuixiao
    64             {
    65                 init();
    66                 for(j = i; j < m; j++)//zhaozuidabian
    67                 {
    68                     Merge(e[j].x,e[j].y);
    69                     if(Find(st) == Find(en))//起点终点相连
    70                     {
    71                         mindis = min(mindis,e[j].w - e[i].w);
    72                         break;
    73                     }
    74                 }
    75                 if(j == m) break; //j == m 继续枚举也不可能找到
    76             }
    77             if(mindis != INF) cout<<mindis<<endl;
    78             else cout<<"-1"<<endl;
    79         }
    80     }
    81 }
    82 int main()
    83 {
    84     freopen("input.txt","r",stdin);
    85     kruskal();
    86     return 0;
    87 }
  • 相关阅读:
    各种读取速度
    索引倒排
    清空mysql数据
    java随机读取文件
    移动文件
    输出字符串数组
    背包问题
    使用bloomfilter
    使用hash拆分文件
    判断文件的编码格式
  • 原文地址:https://www.cnblogs.com/imLPT/p/3871106.html
Copyright © 2020-2023  润新知