結果
| 問題 | No.1320 Two Type Min Cost Cycle |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 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;
}
vjudge1