結果
| 問題 |
No.1320 Two Type Min Cost Cycle
|
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-10-01 20:26:37 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 243 ms / 2,000 ms |
| コード長 | 1,991 bytes |
| コンパイル時間 | 1,811 ms |
| コンパイル使用メモリ | 171,188 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-10-01 20:26:43 |
| 合計ジャッジ時間 | 6,144 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 57 |
ソースコード
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=4002,inf=1e18;
int t,n,m,u[N],v[N],w[N],f[N];
bool vis[N],pa[N];
vector<int> x[N],y[N],z[N];
struct node{
int x,id,ba;
friend bool operator <(const node &x,const node &y){
if(x.x!=y.x) return x.x>y.x;
else return x.id>y.id;
}
};
priority_queue<node> p;
void dij(int s){
for(int i=1;i<=n;i++) vis[i]=0,f[i]=inf;
for(int i=1;i<=m;i++)pa[i]=0;
p.push((node){0,s});
f[s]=0;
while(!p.empty()){
int op=p.top().id,sum=p.top().ba;
p.pop();
if(vis[op])continue;
vis[op]=1;
pa[sum]=1;
for(int i=0;i<x[op].size();i++){
if(y[op][i]+f[op]<f[x[op][i]]){
f[x[op][i]]=y[op][i]+f[op];
p.push((node){f[x[op][i]],x[op][i],z[op][i]});
}
}
}
return;
}
signed main(){
cin>>t>>n>>m;
if(t==0){
for(int i=1;i<=m;i++){
cin>>u[i]>>v[i]>>w[i];
x[u[i]].push_back(v[i]);
x[v[i]].push_back(u[i]);
y[u[i]].push_back(w[i]);
y[v[i]].push_back(w[i]);
z[u[i]].push_back(i);
z[v[i]].push_back(i);
}
int ans=inf;
for(int i=1;i<=n;i++){
dij(i);
for(int j=1;j<=m;j++){
if(pa[j]==0){
ans=min(ans,f[u[j]]+f[v[j]]+w[j]);
}
}
}
if(ans==inf) ans=-1;
cout<<ans<<endl;
}
else {
for(int i=1;i<=m;i++){
cin>>u[i]>>v[i]>>w[i];
x[u[i]].push_back(v[i]);
y[u[i]].push_back(w[i]);
z[u[i]].push_back(i);
}
int ans=inf;
for(int i=1;i<=n;i++){
dij(i);
for(int j=1;j<=m;j++){
if(v[j]==i){
ans=min(ans,f[u[j]]+w[j]);
}
}
}
if(ans==inf) ans=-1;
cout<<ans<<endl;
}
return 0;
}
/*
*/
vjudge1