1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include<bits/stdc++.h> using namespace std; #define Debug(x) cout<<#x<<':'<<x<<endl #define INF 0x7fffffff typedef long long ll; typedef pair<ll,ll> P; const ll maxn=2e3+11; const ll maxm=5e3+11; struct Edge{ ll to,w,nx; }e[maxm]; ll head[maxn],vis[maxn],dis[maxn][maxn]; ll n,m,tmp,flag,c,start; priority_queue<P,vector<P>,greater<P>> q; void add(ll u,ll v,ll w){ e[tmp]={v,w,head[u]};head[u]=tmp++; } void dijkstra(){ q.push({0,start});dis[start][start]=0; while(!q.empty()){ ll u=q.top().second;q.pop(); if(vis[u]) continue; vis[u]=1; for(ll i=head[u];i;i=e[i].nx){ ll v=e[i].to; if(dis[start][u]+e[i].w<dis[start][v]){ dis[start][v]=dis[start][u]+e[i].w; q.push({dis[start][v],v}); } } } } void solve(){ if(flag==0){ cout<<"0"<<endl;return ; } memset(dis,0x1f,sizeof(dis)); for(ll i=1;i<=n;i++){ start=i; memset(vis,0,sizeof(vis)); dijkstra(); } ll minn=INF; for(ll i=1;i<=n;i++){ for(ll j=1;j<=n;j++){ if(i==j) continue; minn=min(minn,dis[i][j]+dis[j][i]); } } if(c<minn){ cout<<"1"<<endl;return ; } cout<<"2"<<endl; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m>>c; flag=0;tmp=1; for(ll i=1;i<=m;i++){ ll u,v,w;cin>>u>>v>>w;add(u,v,w); if(w<=c) flag=1; } solve(); return 0; }
|