B. 那一天她离我而去(noip模拟赛)
Posted oierglh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. 那一天她离我而去(noip模拟赛)相关的知识,希望对你有一定的参考价值。
题目描述
她走的悄无声息,消失的无影无踪。
至今我还记得那一段时间,我们一起旅游,一起游遍山水。到了最终的景点,她却悄无声息地消失了,只剩我孤身而返。
现在我还记得,那个旅游区可以表示为一张由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(dians,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);
以上是关于B. 那一天她离我而去(noip模拟赛)的主要内容,如果未能解决你的问题,请参考以下文章