結果

問題 No.1320 Two Type Min Cost Cycle
ユーザー vjudge1
提出日時 2025-09-30 22:03:46
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,462 bytes
コンパイル時間 1,256 ms
コンパイル使用メモリ 168,972 KB
実行使用メモリ 13,968 KB
最終ジャッジ日時 2025-09-30 22:03:50
合計ジャッジ時間 3,890 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 WA * 1
other AC * 8 WA * 49
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
const int INF=1e9+10;
int T,n,m,cnt,ans=INF;
int head[N],nxt[N],to[N],val[N],dis[N],vis[N],fa[N];
struct node{
	int u,v,w;
}a[N];
inline void add(int u,int v,int w){nxt[++cnt]=head[u];head[u]=cnt;to[cnt]=v;val[cnt]=w;return;}
inline void dij(int s){
	dis[s]=0;
	priority_queue<pair<int,int> > q;
	q.push({-dis[s],s});
	while(q.size()!=0){
		pair<int,int> h=q.top();q.pop();
		int x=h.second;
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=head[x];i;i=nxt[i]){
			int y=to[i],w=val[i];
			if(dis[y]>dis[x]+w){
				dis[y]=dis[x]+w;fa[y]=x;
				q.push({-dis[y],y});
			}
		}
	}
}
signed main(){
	cin>>T>>n>>m;
	if(T==0){
		for(int i=1,u,v,w;i<=m;i++){
			cin>>u>>v>>w;
			a[i].u=u;a[i].v=v;a[i].w=w;
			add(u,v,w);
			add(v,u,w);
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++) dis[j]=INF,vis[j]=0,fa[j]=0;
			dij(i);
			for(int j=1;j<=m;j++){
				int u=a[j].u,v=a[j].v,w=a[j].w;
				if(v==i||u==i) continue;
				if(fa[u]==v||fa[v]==u) continue;
				ans=min(ans,dis[u]+dis[v]+w);
			}
		}
		cout<<ans<<"\n";
	}
	if(T==1){
		for(int i=1,u,v,w;i<=m;i++){
			cin>>u>>v>>w;
			a[i].u=u;a[i].v=v;a[i].w=w;
			add(u,v,w);
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++) dis[j]=INF,vis[j]=0,fa[j]=0;
			dij(i);
			for(int j=1;j<=m;j++){
				int u=a[j].u,v=a[j].v,w=a[j].w;
				if(v!=i) continue;
				ans=min(ans,dis[u]+w);
			}
		}
		cout<<ans<<"\n";
	}
	return 0;
}//11313
0