http://codeforces.com/problemset/problem/241/E

首先检测哪些点会出现在从起点到终点的路上,可以用dfs或者迭代,

然后,对于所有的边,设f为边起点,t为边终点,dp[i]为从起点出发到i点所必须花费的时间,则当dp[t]>dp[f]+2,也就是超出限制时,把dp[t]限制到dp[f]+2处,对于dp[f]>dp[t]+1,限制dp[f]到dp[t]+1处

因为这个图没有圈,所以如果存在满足题意的边权方案,那么每次使得一个点的dp值满足要求,n次之后一定全部满足要求,不再发生改动,如果不存在满足题意的边权方案,就会不断发生震荡,此时及时停止循环输出No即可

注意不在起点到终点路上的边全都为1

 #include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e3+;
const int maxm=5e3+;
const int inf=0x3fffffff;
int n,m;
int vis[maxn];
int e[maxm][];
int dp[maxn];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<m;i++)scanf("%d%d",e[i],e[i]+);
vis[]=;vis[n]=;
bool fl=true;
while(fl){
fl=false;
for(int i=;i<m;i++){
int f=e[i][],t=e[i][];
if((vis[f]&)&&(vis[t]&)==){
vis[t]|=;fl=true;
}
if((vis[t]&)&&(vis[f]&)==){
vis[f]|=;fl=true;
}
}
}
fl=true;
int cnt=;
while(fl){
fl=false;
cnt++;
for(int i=;i<m;i++){
int f=e[i][],t=e[i][];
if(vis[f]==&&vis[t]==){
if(dp[t]>dp[f]+){
dp[t]=dp[f]+;
fl=true;
}
if(dp[f]>dp[t]-){
dp[f]=dp[t]-;
fl=true;
}
}
}
if(cnt>n&&fl){puts("No");return ;}
}
puts("Yes");
for(int i=;i<m;i++){
int f=e[i][],t=e[i][];
if(vis[f]==&&vis[t]==)printf("%d\n",dp[t]-dp[f]);
else puts("");
}
return ;
}

CF 241E flights 最短路,重复迭代直到稳定 难度:3的更多相关文章

  1. (中等) CF 576D Flights for Regular Customers (#319 Div1 D题),矩阵快速幂。

    In the country there are exactly n cities numbered with positive integers from 1 to n. In each city ...

  2. CodeForces - 241E Flights 题解

    题目大意: 有一个有向无环图,n个点m条边,所有边权为1或2,求一组使所有从1到n的路径长度相同的边权的方案. 思路: 设从1到i的最短路为dist[i],若有一条从x到y的边,则1<=dist ...

  3. CF Destroying Roads (最短路)

    Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. CF 103E Buying Sets 最大权闭合子图,匹配 难度:4

    http://codeforces.com/problemset/problem/103/E 这道题首先一看就很像是最大权闭合子图,但是我们可以认为现在有两种点,数字和集合点,我们需要消除数字点的影响 ...

  5. 快速切题CF 158B taxi 构造 && 82A double cola 数学观察 难度:0

    实在太冷了今天 taxi :错误原因1 忽略了 1 1 1 1 和 1 2 1 这种情况,直接认为最多两组一车了 2 语句顺序错 double cola: 忘了减去n的序号1,即n-- B. Taxi ...

  6. 算法学习笔记(三) 最短路 Dijkstra 和 Floyd 算法

    图论中一个经典问题就是求最短路.最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划.这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是 ...

  7. LoadRunner中Action的迭代次数的设置和运行场景中设置

    LoadRunner中Action的迭代次数的设置和运行场景中设置 LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢? ...

  8. loadrunner中并发数与迭代的区别

    你的理解的虚拟用户应该是 迭代次数 ,录制脚本时只会有1个虚拟用户,1个虚拟用户可以有多次 迭代,也就是 重复执行 Action里面的内容,在场景设置的时候,如果你说的10时在runtime-sett ...

  9. Lr中脚本的迭代次数和场景运行时间的关系

    Loadrunner中脚本的迭代次数和场景运行时间的关系 LR 的Vugen和controller中迭代是这样的: 当场景的持续时间为“运行至结束”时,以Vugen中设置的迭代次数为准 当场景的持续时 ...

随机推荐

  1. 08 Transactions

    本章提要------------------------------------------事务的特性事务控制语句------------------------------------------事 ...

  2. Android ViewFlipper控件实例

    使用ViewFlipper实现两张图片切换效果,废话不多说,直接上代码. java源码: package com.example.viewflipper; import android.os.Bund ...

  3. MySQL忘记root密码--skip-grant-tables

    使用--skip-grant-tables选项启动MYSQL时,服务器将不加载权限判断,这样就可以进行授权和密码更新操作了,具体步骤如下: 1. 停止mysql /etc/init.d/mysqld ...

  4. return

    return作为返回关键字,有以下两种意义的返回格式: 1,返回把握与函数成果:停止函数执行,返回调用函数,并且把函数的值作为返回成果. turn只能退出当前函数,如果多个函数嵌套就不行了,要想整个退 ...

  5. 键盘控制div移动

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...

  6. windows服务名称不是单个单词的如何启动?

    比如要启动  Memcached Server: 命令行中输入命令要注意大小写,大小写要保持一致,正确的写法如下: net  start  "Memcached Server". ...

  7. 【linux命令】:查看当前登录用户的信息,本文介绍3种方法

    作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正在做什么.本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法. 1. 使用w ...

  8. hdu 5713(状态压缩DP)

    要进行两次dp, 第一个,dp[i],1<=i<=(1<<n) 其中用i的二进制形式表示已选择的点. dp[i] 用来保存i中的点构成一个连通块,边集多少种可能. 转移方程: ...

  9. Statspack安装配置及使用

    1.1 概念 statspack,用于收集系统信息,诊断数据库故障,也方便第三方技术支持进行远程阅读和建议.它连续收集数据信息,能够提供趋势分析,同时也需要单独分配一个表空间来存储这些统计数据.即在安 ...

  10. MyBatis学习笔记(二) 关联关系

    首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...