http://codeforces.com/contest/716/problem/D

题目大意:给你一些边,有权值,权值为0的表示目前该边不存在,但是可以把0修改成另外一个权值。现在,我们重新建路,问让s-t的最短路能否刚好是L?

思路:暴力修改即可。。。

//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const int maxn = + ;
const LL inf = 1e17;
struct Edge{
int from, to; LL val;
Edge(int u = , int v = , LL val = ): from(u), to(v), val(val){}
};
vector<Edge> G[maxn];
vector<Edge> zero;
vector<Edge> realroad;
int n, m, s, t;
LL L;
LL d[maxn]; void dijstra(int s){
queue<int> que;
for (int i = ; i < n; i++) d[i] = inf;
que.push(s);
d[s] = ;
while (!que.empty()){
int u = que.front(); que.pop();
int len = G[u].size();
for (int i = ; i < len; i++){
Edge &e = G[u][i];
if (d[e.to] > d[u] + e.val){
d[e.to] = d[u] + e.val;
que.push(e.to);
}
}
}
} int main(){
cin >> n >> m >> L >> s >> t;
for (int i = ; i < m; i++){
int u, v; LL val; scanf("%d%d%I64d", &u, &v, &val);
if (val != ) {
G[u].push_back(Edge(u, v, val)), G[v].push_back(Edge(v, u, val));
realroad.push_back(Edge(u, v, val));
}
else if (val == ) zero.push_back(Edge(u, v, val));
}
dijstra(s);
///printf("d[t] = %I64d\n", d[t]);
if (d[t] < L) {
printf("NO\n"); return ;
}
else if (d[t] == L){
printf("YES\n");
for (int i = ; i < realroad.size(); i++){
printf("%d %d %I64d\n", realroad[i].from, realroad[i].to, realroad[i].val);
}
for (int i = ; i < zero.size(); i++){
printf("%d %d %I64d\n", zero[i].from, zero[i].to, inf);
}
return ;
} for (int i = ; i < zero.size(); i++){
Edge &e = zero[i];
G[e.from].push_back(Edge(e.from, e.to, ));
G[e.to].push_back(Edge(e.to, e.from, ));
e.val = ;
dijstra(s);
if (d[t] <= L){
e.val = L - d[t] + ;
break;
}
}
if (d[t] > L) printf("NO\n");
else {
printf("YES\n");
for (int i = ; i < realroad.size(); i++){
printf("%d %d %I64d\n", realroad[i].from, realroad[i].to, realroad[i].val);
}
for (int i = ; i < zero.size(); i++){
if (zero[i].val == )printf("%d %d %I64d\n", zero[i].from, zero[i].to, inf);
else printf("%d %d %I64d\n", zero[i].from, zero[i].to, zero[i].val);
}
} return ;
}
/看看会不会爆int!数组会不会少了一维!//取物问题一定要小心先手胜利的条件#include<bits/stdc++.h>usingnamespace std;#define LL longlong#define ALL(a) a.begin(), a.end()#define pb push_back
#define mk make_pair
#definefi first
#define se second
#define haha printf("haha\n")constint maxn =1000+5;const LL inf =1e17;structEdge{intfrom, to; LL val;Edge(int u =0,int v =0, LL val =0):from(u), to(v), val(val){}};
vector<Edge> G[maxn];
vector<Edge> zero;
vector<Edge> realroad;int n, m, s, t;
LL L;
LL d[maxn];void dijstra(int s){
queue<int> que;for(int i =0; i < n; i++) d[i]= inf;
que.push(s);
d[s]=0;while(!que.empty()){int u = que.front(); que.pop();int len = G[u].size();for(int i =0; i < len; i++){Edge&e = G[u][i];if(d[e.to]> d[u]+ e.val){
d[e.to]= d[u]+ e.val;
que.push(e.to);}}}}int main(){
cin >> n >> m >> L >> s >> t;for(int i =0; i < m; i++){int u, v; LL val; scanf("%d%d%I64d",&u,&v,&val);if(val !=0){
G[u].push_back(Edge(u, v, val)), G[v].push_back(Edge(v, u, val));
realroad.push_back(Edge(u, v, val));}elseif(val ==0) zero.push_back(Edge(u, v, val));}
dijstra(s);///printf("d[t] = %I64d\n", d[t]);if(d[t]< L){
printf("NO\n");return0;}elseif(d[t]== L){
printf("YES\n");for(int i =0; i < realroad.size(); i++){
printf("%d %d %I64d\n", realroad[i].from, realroad[i].to, realroad[i].val);}for(int i =0; i < zero.size(); i++){
printf("%d %d %I64d\n", zero[i].from, zero[i].to, inf);}return0;}for(int i =0; i < zero.size(); i++){Edge&e = zero[i];
G[e.from].push_back(Edge(e.from, e.to,1));
G[e.to].push_back(Edge(e.to, e.from,1));
e.val =1;
dijstra(s);if(d[t]<= L){
e.val = L - d[t]+1;break;}}if(d[t]> L) printf("NO\n");else{
printf("YES\n");for(int i =0; i < realroad.size(); i++){
printf("%d %d %I64d\n", realroad[i].from, realroad[i].to, realroad[i].val);}for(int i =0; i < zero.size(); i++){if(zero[i].val ==0)printf("%d %d %I64d\n", zero[i].from, zero[i].to, inf);else printf("%d %d %I64d\n", zero[i].from, zero[i].to, zero[i].val);}}return0;}

codeforces DIV2 D 最短路的更多相关文章

  1. codeforces div2 677 D

    http://codeforces.com/problemset/problem/677/D 题目大意: 给你一个n*m的图,上面有p种钥匙(p<=n*m),每种钥匙至少有一个,期初所有为1的钥 ...

  2. codeforces div2.C

    C. New Year and Rating time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  3. Dynamic Shortest Path CodeForces - 843D (动态最短路)

    大意: n结点有向有权图, m个操作, 增加若干边的权重或询问源点为1的单源最短路. 本题一个特殊点在于每次只增加边权, 并且边权增加值很小, 询问量也很小. 我们可以用johnson的思想, 转化为 ...

  4. CodeForces 25C(Floyed 最短路)

    F - Roads in Berland Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I6 ...

  5. codeforces div2 603 D. Secret Passwords(并查集)

    题目链接:https://codeforces.com/contest/1263/problem/D 题意:有n个小写字符串代表n个密码,加入存在两个密码有共同的字母,那么说这两个密码可以认为是同一个 ...

  6. codeforces div2 603 E. Editor(线段树)

    题目链接:https://codeforces.com/contest/1263/problem/E 题意:一个编译器,每次输入一些字符,R表示光标右移,L表示光标左移,然后有一些左括号(  和 右括 ...

  7. codeforces div2 603 C. Everyone is a Winner!(二分)

    题目链接:https://codeforces.com/contest/1263/problem/C 题意:给你一个数字n,求n/k有多少个不同的数 思路:首先K大于n时,n/k是0.然后k取值在1到 ...

  8. codeforces div2 220 解题

    这套题我只写了a, b, c..  对不起,是我太菜了. A:思路:就是直接简化为一个矩阵按照特定的步骤从一个顶角走到与之对应的对角线上的顶角.如图所示. 解释一下特定的步骤,就像马走日,象走田一样. ...

  9. codeforces div2 C题思路训练【C题好难,我好菜】

    1017C The Phone Number: 构造数列使得LIS和LDS的和最小,定理已知LIS=L,LDS=n/L的向上取整,根据样例可以得到设置L=根号n,构造方法如样例 截断法构造,不用考虑边 ...

随机推荐

  1. FZU 1627 Revival's road

    矩阵快速幂. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #inc ...

  2. RabbitMQ持久化编码注意事项

    以Java语言,MQ客户端为amqp-client作为示例 1.基本原则 direct模式,由生产者声明队列名,消费者也声明队列名 topic模式,由生产者声明交换器名,由消费者声明队列名+交换器名+ ...

  3. Facebook 添加点赞按钮

    本来以为facebook文档里面会有那么一个简单的API,请求之后就可以对指定的页面点赞.但可能是出于防作弊方面的考虑,facebook只提供了自己官方的按钮 https://developers.f ...

  4. 设置 SSH 免密码登陆——仍提示输入密码

    1)生成密钥:在根目录下(cd  ~/   用户根目录)执行如下语句: ssh-keygen -t dsa -P ' ' -f ~/.ssh/id_dsa 以上是两个单引号. 2)将id_dsa.pu ...

  5. 遍历(二)javascript的Foreach语法

    原文:http://www.cnblogs.com/Fskjb/archive/2011/03/26/1996165.html 首先,虽然叫foreach语法但关键字还是用for哦,这个语法只是对平时 ...

  6. hdu_5965_扫雷(递推)

    题目链接:hdu_5965_扫雷 题意: 中文,还是自己看吧. 题解: 现场赛这题用的状压DP过的,不过现在想想当时还确实想复杂了,冷静下来仔细思靠一下,其实第i-1个确定了,那么第i个也是确定的,可 ...

  7. IIS7部署MVC站点后,打开无法正常跳转到首页

    产品拿到安装包后想在本地安装测试一下,但是管理工具里没有IIS. 后来在windows功能里添加iis服务. 添加后成功安装. 但是第一次打开时,页面提示要“启用目录浏览”. 启用后,打开的却是站点目 ...

  8. LeetCode OJ 33. Search in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  9. AIX 永久修改环境变量

    转自:http://blog.sina.com.cn/s/blog_5e3122450100stk5.html 方法一:PATH=$PATH:/usr/XX        export PATH重启一 ...

  10. The Linux Storage Stack Diagram 内核 4.0 版的 I/O 栈