zoukankan      html  css  js  c++  java
  • HDU1874畅通工程续(floyd||dijkstra)

    看了看floyd和dijkstra,然后就找了两个练习来捉

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<map>
     5 #include<vector>
     6 #include<set>
     7 #include<stack>
     8 #include<queue>
     9 #include<algorithm>
    10 #include<stdlib.h>
    11 using namespace std;
    12 #define MAX(a,b) (a > b ? a : b)
    13 #define MIN(a,b) (a < b ? a : b)
    14 #define MAXN  10000001
    15 #define INF 1000000007
    16 #define mem(a) memset(a,0,sizeof(a))
    17 
    18 int w[200][200];
    19 int d[200];
    20 int vis[200];
    21 int n;
    22 
    23 void dijkstra(int s)
    24 {
    25     d[s]=0;
    26     for(int k=0;k<n;k++)
    27     {
    28         int m=INF;
    29         for(int i=0;i<n;i++)
    30         {
    31             if(!vis[i] && d[i]<=m)
    32                 m=d[s=i];
    33         }
    34         vis[s] = 1;
    35         for(int i=0;i<n;i++)
    36         {
    37             d[i]=MIN(d[i], d[s]+w[s][i]);
    38         }
    39     }
    40 }
    41 
    42 /*
    43 void floyd()
    44 {
    45     for(int k=0;k<n;k++)
    46     {
    47         for(int i=0;i<n;i++)
    48         {
    49             for(int j=0;j<n;j++)
    50             {
    51                 w[i][j] = MIN(w[i][j], w[i][k] + w[k][j]);
    52             }
    53         }
    54     }
    55 }
    56 */
    57 
    58 int main()
    59 {
    60     //freopen("in.txt","r",stdin);
    61     //freopen("out.txt","w",stdout);
    62     int m;
    63     while(~scanf("%d%d",&n,&m))
    64     {
    65         mem(vis);
    66         for(int i=0;i<n;i++)
    67         {
    68             d[i]=INF;
    69             for(int j=0;j<n;j++)
    70             {
    71                 w[i][j]=INF;
    72             }
    73         }
    74         int a,b,x;
    75         for(int i=0;i<m;i++)
    76         {
    77             scanf("%d%d%d",&a,&b,&x);
    78             if(w[a][b]>x)w[a][b] = w[b][a] = x;
    79         }
    80         int s,t;
    81         scanf("%d%d",&s,&t);
    82         if(s==t){printf("0
    ");continue;}
    83 
    84         dijkstra(s);   printf("%d
    ",d[t] == INF?-1 : d[t]);
    85 
    86  //       floyd();   printf("%d
    ",w[s][t]==INF?-1:w[s][t]);
    87 
    88 
    89     }
    90     return 0;
    91 }
  • 相关阅读:
    Sigma Function 数学 因子求和
    luogu P3800 Power收集
    LibreOJ #110. 乘法逆元
    luogu P3802 小魔女帕琪
    LibreOJ #6000. 「网络流 24 题」搭配飞行员
    LibreOJ #103. 子串查找
    LibreOJ #102. 最小费用流
    LibreOJ #109. 并查集
    BZOJ 1922: [Sdoi2010]大陆争霸
    LibreOJ #119. 最短路
  • 原文地址:https://www.cnblogs.com/gj-Acit/p/3204131.html
Copyright © 2011-2022 走看看