zoukankan      html  css  js  c++  java
  • Telephone Lines

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m,k;
     4 const int maxn=1e6+10;
     5 const int maxm=9e6+10;
     6 const int inf=0x3f3f3f3f;
     7 struct Dijkstra
     8 {
     9     struct Edge
    10     {
    11         int next,  to ,w;
    12     } e[maxm];
    13     int head[maxn],v[maxn],d[maxn],tol;
    14     void add(int u, int v, int w)
    15     {
    16         tol++;
    17         e[tol].to = v;
    18         e[tol].next = head[u];
    19         e[tol].w = w;
    20         head[u] = tol;
    21     }
    22     priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q1;
    23     int dijkstra(int s,int t)
    24     {
    25         memset(d,inf,sizeof(d));
    26         memset(v,0,sizeof(v));
    27         d[s] = 0;
    28         q1.push(make_pair(0, s));
    29         while (!q1.empty())
    30         {
    31             int x = q1.top().second;
    32             q1.pop();
    33             if (!v[x])
    34             {
    35                 v[x] = 1;
    36                 for (register int i = head[x]; i; i = e[i].next)
    37                 {
    38                     int to=e[i].to,k=max(e[i].w,d[x]);
    39                     if (d[to]>k){
    40                         d[to]=k;
    41                         q1.push(make_pair(d[to], to));
    42                     }
    43                 }
    44             }
    45         }
    46         return d[t];
    47     }
    48  
    49     void init()
    50     {
    51         memset(head, 0, sizeof(head));
    52         tol = 0;
    53     }
    54 } H;
    55  
    56  
    57 int main(){
    58     scanf("%d%d%d",&n,&m,&k);
    59     H.init();
    60     for (int i=1;i<=m;i++){
    61         int u,v,w;
    62         scanf("%d%d%d",&u,&v,&w);
    63         H.add(u,v,w);
    64         H.add(v,u,w);
    65         for (int j=1;j<=k;j++) {
    66             H.add(u+n*(j-1), v + j * n, 0);
    67             H.add(v+n*(j-1),  u+ j * n, 0);
    68             H.add(u+j*n,v+j*n,w);
    69             H.add(v+j*n,u+j*n,w);
    70         }
    71         for (int i=1;i<=k;i++){
    72             H.add(i*n,(i+1)*n,0);
    73         }
    74     }
    75     int ans=H.dijkstra(1,n*(k+1));
    76     if (ans==inf) printf("-1
    ");else printf("%d
    ",ans);
    77 }
    View Code

  • 相关阅读:
    scrapy中selenium的应用
    Django的锁和事务
    redis
    【leetcode】187. Repeated DNA Sequences
    【leetcode】688. Knight Probability in Chessboard
    【leetcode】576. Out of Boundary Paths
    【leetcode】947. Most Stones Removed with Same Row or Column
    【leetcode】948. Bag of Tokens
    【leetcode】946. Validate Stack Sequences
    【leetcode】945. Minimum Increment to Make Array Unique
  • 原文地址:https://www.cnblogs.com/Accpted/p/11230782.html
Copyright © 2011-2022 走看看