标签:出发点 class scanf led Fix empty row 描述 noi
她走的悄无声息,消失的无影无踪。
至今我还记得那一段时间,我们一起旅游,一起游遍山水。到了最终的景点,她却悄无声息地消失了,只剩我孤身而返。
现在我还记得,那个旅游区可以表示为一张由nnn个节点mmm条边组成无向图。我故地重游,却发现自己只想尽快地结束这次旅游。我从景区的出发点(即 1 号节点)出发,却只想找出最短的一条回路重新回到出发点,并且中途不重复经过任意一条边。
即:我想找出从出发点到出发点的小环。
每个测试点有多组测试数据
第一行有一个正整数T,(T≤10)表示数据组数
接下来对于每组数据,第一行有两个正整数 n,m,(n,m≤104) 分别代表图的点数和边数
接下来有mmm行,每行三个整数u,v,du,v,du,v,d表示u,vu,vu,v之间存在一条长度为 d,(d≤103)的路径
保证不存在重边,自环。
对于每组测试数据,输出题目中所求的最小环的长度。
无解输出 -1
2
3 3
1 2 1
2 3 1
3 1 1
4 5
1 2 2
2 3 2
3 4 2
1 4 2
1 3 5
3
8
对于30%的数据 | 对于另外30%的数据 | 对于100%的数据 | |
---|---|---|---|
nnn | n≤103 | n≤104 | n≤ 10410^410?4?? |
mmm | n≤4∗103 | m=nm=nm=n | m≤4∗104 |
#include<bits/stdc++.h> using namespace std; const int N = 4e5 + 5; int T; int n,m,tot,s,t; int dis[N],head[N],ecnt,cnt,ans; bool vis[N]; struct edge { int to,nxt,val; }a[N]; struct node { int to,dis; }S[N]; struct dian { int id,dis; }; bool operator <(dian x,dian y) { return x.dis>y.dis; } priority_queue<dian>q; void Dijkstra() { for(int i=1;i<=tot;i++) dis[i]=0x3f3f3f3f,vis[i]=false; dis[s]=0; q.push(dian{s,0}); while(!q.empty()) { dian x=q.top(); q.pop(); if(vis[x.id]) continue; vis[x.id]=true; for(int i=head[x.id];i;i=a[i].nxt) { if(dis[a[i].to]>dis[x.id]+a[i].val) dis[a[i].to]=dis[x.id]+a[i].val; q.push((dian){a[i].to,dis[a[i].to]}); } } ans=min(ans,dis[t]); } void add(int u,int v,int w) { a[++ecnt].to=v; a[ecnt].nxt=head[u]; a[ecnt].val=w; head[u]=ecnt; } void init() { ecnt = cnt = 0; memset(head, 0, sizeof(head)); memset(a,0,sizeof(a)); memset(S, 0, sizeof(S)); ans = 0x3f3f3f3f; } int main() { cin>>T; while(T--) { init(); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); if(u>v) swap(u,v); if(u==1) S[++cnt]=(node){v,w}; else add(u,v,w),add(v,u,w); } tot=n; for(int i=1;i<=n;i<<=1) { s=++tot; t=++tot;//超级源点和终点 for(int j=1;j<=cnt;j++) { if(S[j].to&i) add(s,S[j].to,S[j].dis); else add(S[j].to,t,S[j].dis); } Dijkstra(); } if(ans==0x3f3f3f3f) ans=-1; printf("%d\n",ans); } }
标签:出发点 class scanf led Fix empty row 描述 noi
原文地址:https://www.cnblogs.com/oierglh/p/11220571.html