• Charles in Charge


    Charles in Charge

     

     

     AC_Code

     1 ///迪杰斯特拉算法,从小的点开始更新
     2 #include <bits/stdc++.h>
     3 typedef long long ll;
     4 const int maxn = 5000100;
     5 const ll INF = 1e18+9;
     6 using namespace std;
     7 
     8 ll x[maxn],y[maxn],z[maxn];
     9 vector<pair<ll,ll> >v[maxn];
    10 priority_queue<pair<ll,ll> >Q;
    11 ll n,m,k,ruler;
    12 ll length[maxn];
    13 
    14 bool dij(ll len){
    15 
    16     ll i;
    17     for(i=0;i<=n;i++){
    18         v[i].clear();
    19         length[i] = INF;
    20     }
    21 
    22     for(i=1; i<=m; i++){
    23         if( z[i]<=len ){
    24             v[x[i]].push_back(make_pair(y[i],z[i]));
    25             v[y[i]].push_back(make_pair(x[i],z[i]));
    26         }
    27     }
    28     Q.push(make_pair(0,1));
    29     length[1] = 0;
    30 
    31     while( !Q.empty()){
    32         ll a, b, c, d;
    33         a = Q.top().second;
    34         b = Q.top().first;
    35         Q.pop();
    36         if( b>length[a] ) continue;
    37         for( i=0;i<v[a].size(); i++){
    38             c = v[a][i].first;
    39             d = v[a][i].second;
    40             if( length[c]>length[a]+d ){
    41                 length[c] = length[a]+d;
    42                 Q.push(make_pair(-length[c],c));///优先队列从大到小排,为了从小到大排,我们存入一个负的值
    43             }
    44         }
    45     }
    46 
    47     if( length[n]*100<=ruler*(100+k)) return true;
    48     else return false;
    49 }
    50 
    51 int main()
    52 {
    53     ll i,mid=-1,right,left;
    54     scanf("%lld%lld%lld",&n,&m,&k);
    55 
    56     for(i=1;i<=m;i++){
    57         scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
    58     }
    59 
    60     right = 1e9+7;
    61     left = 0;
    62     dij(1e9+7);
    63     ruler = length[n];
    64 
    65     while( left<right ){
    66         mid = (left+right)>>1;
    67         if( dij(mid) ){
    68             right = mid;
    69         }
    70         else left = mid+1;
    71     }
    72     printf("%lld
    ",left);
    73     return 0;
    74 }
  • 相关阅读:
    删除MSSQL危险存储过程的代码
    给年轻工程师的十大忠告[转贴]
    HTML中利用堆栈方式对Table进行行排序
    年轻人宣言:青春符号
    刘亦菲小龙女绝美剧照
    精巧完整的日历程序
    XSLT快速参考
    酒吧里经典的英文歌曲专集(4CD)
    检测系统颜色与使用字体
    SQL Server实用操作小技巧集合
  • 原文地址:https://www.cnblogs.com/wsy107316/p/12243240.html
Copyright © 2020-2023  润新知