SDUTOJ3309----乱七八糟的图
来源:互联网 发布:淘宝店加权重有哪些 编辑:程序博客网 时间:2024/05/22 15:05
乱七八糟的图
Time Limit: 4000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给一个连通无向图,图有n个顶点m条边,可能会有重边,无自环。然后给一个出发点st,现在这个st到其他每一个顶点都有一个最短距离。然后,让你删除一些边,剩下的边构成了一个新连通无向图,要求在新图中,出发点st到其他任何一个顶点的最短距离跟删边之前的最短距离保持不变,而且要求剩下的所有边的总长度最短。求出这个总长度。
输入
多组输入。每组测试数据第一行为两个整数n(1<=n<=3*10^4)和m(1<=m<=3*10^5).接下来m行,每行包括三个整数u,v,w.(1<=u,v<=n,1<=w<=10^9),表示顶点u和v之间有一条长度为w的无向边。最后一行给出一个整数st,(1<=st<=n)表示出发点。
输出
每组测试数据输出一个整数表示最短的总长度。
示例输入
3 31 2 12 3 11 3 234 41 2 12 3 13 4 14 1 24
示例输出
24#include <iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#include<stack>#include<climits>#include<map>#define LL long longusing namespace std;int n,m;const int N = 3e4+10;const int M=6e5+10;const LL INF =LONG_LONG_MAX>>1;struct node{ int u,v; LL w; int next;} T[M];int head[N];LL dis[N];int path[N];bool flag[N];int top;queue<int>Q;map<pair<int,int>,bool>S;void creat(int u,int v,LL w){ T[top].u=u; T[top].v=v; T[top].w=w; T[top].next=head[u]; head[u]=top++;}void SPFA(int str){ memset(flag,0,sizeof(flag)); for(int i=1; i<=n; i++) { dis[i]=INF; path[i]=-1; } dis[str]=0; Q.push(str); flag[str]=1; int u,v; LL g; while(!Q.empty()) { u=Q.front(); Q.pop(); flag[u]=0; for(int i=head[u]; i!=-1; i=T[i].next) { v=T[i].v; g=dis[u]+T[i].w; if(dis[v]>g) { dis[v]=g; path[v]=u; if(!flag[v]) { flag[v]=1; Q.push(v); } } } }}void solve(int str){ int u; LL g,w; LL tmp; LL ans=0; for(int i=1; i<=n; i++) { if(i==str) continue; tmp=INF; for(int j=head[i]; j!=-1; j=T[j].next) { u=T[j].v; g= dis[u]+(w=T[j].w); if(dis[i]==g&&w<tmp) { path[i]=u; tmp=w; } } ans+=tmp; } printf("%lld\n",ans);}int main(){ int u,v; LL w; int str; while(~scanf("%d%d",&n,&m)) { memset(head,-1,sizeof(head)); top=0; for(int i=0; i<m; i++) { scanf("%d%d%lld",&u,&v,&w); creat(u,v,w); creat(v,u,w); } scanf("%d",&str); while(!Q.empty())Q.pop(); SPFA(str); solve(str); } return 0;}
0 0
- SDUTOJ3309----乱七八糟的图
- 乱七八糟的
- SDUTOJ 3309乱七八糟的图(spfa)
- 写的乱七八糟的.....
- IOS的乱七八糟的
- 一些乱七八糟的字
- 乱七八糟的周么
- 一些乱七八糟的笔记
- 关于乱七八糟的生活
- 乱七八糟的想法
- 硬件市场的乱七八糟
- 前言的乱七八糟
- 乱七八糟的事情
- 乱七八糟的笔记
- 乱七八糟的备份
- 关于android 的乱七八糟
- 乱七八糟的书籍评论
- 系统乱七八糟的命令
- QQ主界面的滑动效果的实现(xml中定义布局属性)
- 趣写算法系列之--匈牙利算法
- 通过inotify监控linux文件系统变化
- 第三周项目(8):顺序表应用(2)
- .a 静态库
- SDUTOJ3309----乱七八糟的图
- poj 1330
- 命令支持管道
- HDU——5281 Senior's Gun
- 多线程篇 概念混淆面试常考问题
- Android SharedPreferences在不同应用模块里通信
- HDU 1527 取石子游戏(威佐夫博弈)
- 串口mcu:重新编写的ldisc
- ubunt 下搭建ftp服务器