博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #303 (Div. 2) E. Paths and Trees 最短路
阅读量:5882 次
发布时间:2019-06-19

本文共 3979 字,大约阅读时间需要 13 分钟。

E. Paths and Trees

Time Limit: 20 Sec  Memory Limit: 256 MB

题目连接

http://codeforces.com/contest/545/problem/E

Description

Little girl Susie accidentally found her elder brother's notebook. She has many things to do, more important than solving problems, but she found this problem too interesting, so she wanted to know its solution and decided to ask you about it. So, the problem statement is as follows.

Let's assume that we are given a connected weighted undirected graph G = (V, E) (here V is the set of vertices, E is the set of edges). The shortest-path tree from vertex u is such graph G1 = (V, E1) that is a tree with the set of edges E1 that is the subset of the set of edges of the initial graph E, and the lengths of the shortest paths from u to any vertex to G and to G1 are the same.

You are given a connected weighted undirected graph G and vertex u. Your task is to find the shortest-path tree of the given graph from vertex u, the total weight of whose edges is minimum possible.

Input

The first line contains two numbers, n and m (1 ≤ n ≤ 3·105, 0 ≤ m ≤ 3·105) — the number of vertices and edges of the graph, respectively.

Next m lines contain three integers each, representing an edge — ui, vi, wi — the numbers of vertices connected by an edge and the weight of the edge (ui ≠ vi, 1 ≤ wi ≤ 109). It is guaranteed that graph is connected and that there is no more than one edge between any pair of vertices.

The last line of the input contains integer u (1 ≤ u ≤ n) — the number of the start vertex.

 

Output

In the first line print the minimum total weight of the edges of the tree.

In the next line print the indices of the edges that are included in the tree, separated by spaces. The edges are numbered starting from 1 in the order they follow in the input. You may print the numbers of the edges in any order.

If there are multiple answers, print any of them.

 

Sample Input

3 3 1 2 1 2 3 1 1 3 2 3

Sample Output

2

1 2

HINT

 

题意

给你一个图,然后给你一个点,求一个图,包含这个点到其他点的最短路的边的图。

要求这个图的边权和最小

题解:

跑dijsktra,跑的过程中,如果dis相同,选择小的边,然后就完了……

代码:

 

//qscqesze#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long ll;using namespace std;//freopen("D.in","r",stdin);//freopen("D.out","w",stdout);#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)#define maxn 200001#define mod 10007#define eps 1e-9int Num;char CH[20];//const int inf=0x7fffffff; //нчоч╢Сconst int inf=0x3f3f3f3f;/*inline void P(int x){ Num=0;if(!x){putchar('0');puts("");return;} while(x>0)CH[++Num]=x%10,x/=10; while(Num)putchar(CH[Num--]+48); puts("");}*/inline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}inline void P(int x){ Num=0;if(!x){putchar('0');puts("");return;} while(x>0)CH[++Num]=x%10,x/=10; while(Num)putchar(CH[Num--]+48); puts("");}//**************************************************************************************struct node{ int num,v,w,next;}edge[600010];struct node2{ int u; ll d; bool operator <(const node2 a)const { return a.d
qu;node2 A;int T,t,n,m,Head[300010],tot;ll dis[300010],cost[300010],use[300010],INF=1e16;bool vis[300010],vis2[300010];void add(int u,int v,int w,int num){ edge[tot].num=num; edge[tot].v=v; edge[tot].w=w; edge[tot].next=Head[u]; Head[u]=tot++;}int main(){ int i,j,k,u,v,w,num; ll ans; scanf("%d%d",&n,&m); memset(Head,-1,sizeof(Head)); for(i=1;i<=m;i++) { scanf("%d%d%d",&u,&v,&w); add(u,v,w,i); add(v,u,w,i); } for(i=1;i<=n;i++) dis[i]=cost[i]=INF; scanf("%d",&u); dis[u]=0;cost[u]=0; A.u=u;A.d=0; qu.push(A); while(!qu.empty()) { A=qu.top(); qu.pop(); u=A.u; if(vis[u]) continue; vis[u]=1; vis2[use[u]]=1; for(i=Head[u];i!=-1;i=edge[i].next) { v=edge[i].v; w=edge[i].w; num=edge[i].num; if(dis[u]+w
0) { for(i=1;i<=m;i++) if(vis2[i]) printf("%d ",i); printf("\n"); }}

 

转载地址:http://azpix.baihongyu.com/

你可能感兴趣的文章
编译安装syslog-ng debian
查看>>
通过爬妹子图片来学习async/await
查看>>
【python】编程语言入门经典100例--35
查看>>
cookie增加Secure属性
查看>>
360浏览器兼容模式 - 兼容问题
查看>>
WebLogic11g-负载分发
查看>>
appcan是什么
查看>>
美国破获世纪“银行大劫案”隐形罪犯不再拿刀枪
查看>>
我的友情链接
查看>>
linux系统网络服务命令(一)
查看>>
IT讲师韩顺平:我为什么辞去百万年薪,自己创业?
查看>>
工作记录
查看>>
【go语言】读书随笔
查看>>
Activity猫的一生-故事解说Activity生命周期
查看>>
python:使用socket模块,进行服务器与客户端简单交互
查看>>
FTP服务器的部署和维护心得
查看>>
第一部分 思科九年 一(15)
查看>>
IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表
查看>>
关于SELECT子句中使用聚合函数
查看>>
JavaScript
查看>>