修路
题目描述
奶龙有一个 n 个点 m 条边的无向图,每条边连接顶点 ui,vi ,距离为 wi。
奶龙现在计划在原无向图基础上, 再修 k 条双向道路,这些路径起点都是 1 号点,终点是 1 号点外的其他顶点。假设修了这些路后,从 1 号点到其他点的最短距离为 disi ,奶龙想知道,最多可以少修几条路,少修哪些路,使得从 1 号点到其他点的最短距离仍然为 disi 。
输入格式
第一行三个整数 n,m,k 表示点数,边数,奶龙原本计划修的路数。
接下来 m 行,每行三个整数 ui,vi,wi ,表示一条边的两个端点以及权值。
接下来 k 行,每行两个整数 ti,di ,表示计划修从 1 号点到 ti 号点的一条路,长度为 di 。
输出格式
第一行一个整数 c 表示最多可以少修的路的数量。
第二行 c 个整数表示这些少修的路的编号,编号从小到大输出,如果存在多种方案,请输出任意方案。
样例 #1
样例输入 #1
样例输出 #1
样例 #2
样例输入 #2
样例输出 #2
提示
对于样例1,d1=0,d2=2,d3=3 ,删除第 2 条边之后距离不变。
对于 20% 的数据,满足 n≤10,m≤20 。
对于另外 10% 的数据,满足 n≤100,m≤200 。
对于另外 20% 的数据,满足 n≤1000,m≤2000 。
对于另外 20% 的数据,满足 n≤100000,m≤200000,k=1 。
对于全部数据,满足 1≤n≤100000,1≤m≤200000,0≤k<n,1≤wi,di≤109,1≤ui,vi≤n,ui=vi,ti=1 。
输入保证图联通,即从 1 号点出发能到达任何点,而且 ti 互不相同。