結果
問題 |
No.1320 Two Type Min Cost Cycle
|
ユーザー |
![]() |
提出日時 | 2025-10-01 22:24:53 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 347 ms / 2,000 ms |
コード長 | 1,310 bytes |
コンパイル時間 | 1,867 ms |
コンパイル使用メモリ | 170,940 KB |
実行使用メモリ | 34,468 KB |
最終ジャッジ日時 | 2025-10-01 22:25:00 |
合計ジャッジ時間 | 7,410 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 57 |
ソースコード
#include<bits/stdc++.h> #define int long long using namespace std; const int N=2e3+10; int T,ans=1e18,n,m; struct node{ int u,t; bool operator <(const node &a)const{ return t<a.t; } bool operator >(const node &a)const{ return t>a.t; } }; vector<int>v[N]; int d[N][N],dis[N],mp[N]; priority_queue<node,vector<node>,greater<node> >q; void dij(int st){ while(!q.empty()) q.pop(); for(int i=1;i<=n;i++){ dis[i]=1e15; mp[i]=0; } dis[st]=0; q.push({st,0}); while(!q.empty()){ node si=q.top(); q.pop(); if(mp[si.u]==1)continue; mp[si.u]=1; for(int j:v[si.u]){ if(d[si.u][j]==0) continue; int val=d[si.u][j]; if(dis[si.u]+val<dis[j]){ dis[j]=dis[si.u]+val; q.push({j,dis[j]}); } } } return; } signed main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>T; cin>>n>>m; for(int i=1;i<=m;i++){ int u,w,t; cin>>u>>w>>t; if(T==0){ d[u][w]=d[w][u]=t; v[u].push_back(w); v[w].push_back(u); } else{ v[u].push_back(w); d[u][w]=t; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(d[i][j]!=0){ int p=d[j][i],qq=d[i][j]; d[j][i]=d[i][j]=0; dij(j); ans=min(ans,dis[i]+qq); d[j][i]=p,d[i][j]=qq; } } } if(ans>1e14) cout<<-1; else cout<<ans; return 0; }