CF 241E flights 最短路,重复迭代直到稳定 难度:3

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

 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 const int maxn=1e3+2;
 5 const int maxm=5e3+2;
 6 const int inf=0x3fffffff;
 7 int n,m;
 8 int vis[maxn];
 9 int e[maxm][2];
10 int dp[maxn];
11 int main(){
12         scanf("%d%d",&n,&m);
13         for(int i=0;i<m;i++)scanf("%d%d",e[i],e[i]+1);
14         vis[1]=1;vis[n]=2;
15         bool fl=true;
16         while(fl){
17                 fl=false;
18                 for(int i=0;i<m;i++){
19                         int f=e[i][0],t=e[i][1];
20                         if((vis[f]&1)&&(vis[t]&1)==0){
21                                 vis[t]|=1;fl=true;
22                         }
23                         if((vis[t]&2)&&(vis[f]&2)==0){
24                                 vis[f]|=2;fl=true;
25                         }
26                 }
27         }
28         fl=true;
29         int cnt=0;
30         while(fl){
31                 fl=false;
32                 cnt++;
33                 for(int i=0;i<m;i++){
34                         int f=e[i][0],t=e[i][1];
35                         if(vis[f]==3&&vis[t]==3){
36                                 if(dp[t]>dp[f]+2){
37                                         dp[t]=dp[f]+2;
38                                         fl=true;
39                                 }
40                                 if(dp[f]>dp[t]-1){
41                                         dp[f]=dp[t]-1;
42                                         fl=true;
43                                 }
44                         }
45                 }
46                 if(cnt>n&&fl){puts("No");return 0;}
47         }
48         puts("Yes");
49         for(int i=0;i<m;i++){
50                 int f=e[i][0],t=e[i][1];
51                 if(vis[f]==3&&vis[t]==3)printf("%d\n",dp[t]-dp[f]);
52                 else puts("1");
53         }
54         return 0;
55 }
时间: 2024-10-18 01:28:00

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

(中等) 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 there is an airport is located. Also, there is the only one airline, which makes m flights. Unfortunately, to use them, you need to be a regular custo

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

http://codeforces.com/problemset/problem/103/E 这道题首先一看就很像是最大权闭合子图,但是我们可以认为现在有两种点,数字和集合点,我们需要消除数字点的影响才能直接运用最大权闭合子图. 进行二分匹配,使得每个集合都唯一匹配一个数字,买下一个集合点,则意味着该集合中所有数字的对应匹配集合点都要被买下,也就是可以建立一个新图,其中某个集合点向对应数字代表的集合点连单向边,可以证明对于任意权闭合子图中的集合点,集合中所有数字的对应匹配集合点都已经在这个权闭合

loadrunner中并发数与迭代的区别

你的理解的虚拟用户应该是 迭代次数 ,录制脚本时只会有1个虚拟用户,1个虚拟用户可以有多次 迭代,也就是 重复执行 Action里面的内容,在场景设置的时候,如果你说的10时在runtime-setting的Run Logic里面设置的,那就是1个虚拟用户 迭代 10次,并且要求你设置的场景Duration的类型为Run until Completion 时,这个设置才会起作用,如果Duration的类型是Run for <时间>, 这个意思就是1个用户在这段时间内不停执行Action里面的操

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

LoadRunner中Action的迭代次数的设置和运行场景中设置 LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢?就是说这些资源用了一次就不能在用了的. --参数化时,在select  next row选择unique,update value on选择 each occurence, 1. 迭代跟虚拟用户数没什么必然联系 迭代是这样的: 迭代1次   迭代2次  迭代3次 用户1     X1        

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

Loadrunner中脚本的迭代次数和场景运行时间的关系 LR 的Vugen和controller中迭代是这样的: 当场景的持续时间为“运行至结束”时,以Vugen中设置的迭代次数为准 当场景的持续时间为“具体的几分钟”时,忽略Vugen中的迭代次数,脚步的action重复迭代,直到时间结束为止,按退出策略,执行退出操作

【转】LoadRunner中Action的迭代次数的设置和运行场景中设置

LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢?就是说这些资源用了一次就不能在用了的. --参数化时,在select  next row选择unique,update value on选择 each occurence, 1. 迭代跟虚拟用户数没什么必然联系 迭代是这样的: 迭代1次   迭代2次  迭代3次 用户1     X1           X2             X3 用户2     Y1  

11.Python初窥门径(函数名,可迭代对象,迭代器)

Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return l print(func(1)) # [1] print(func(2)) # [1,2] print(func(3)) # [1,2,3] 二.函数名的应用 函数名指向的是函数的内存地址,加上()就执行这个函数 def func(args): return args print(func) #

最短路题目

负环 https://www.luogu.com.cn/problem/P3385 使用BFS的SPFA算法和普通的SPFA没有什么区别,我们如何判断有没有负环呢?我们有两种判法. 1.记录此点被更新了多少次,更新次数大于N就有负环.这意味着一个点被重复迭代超过N次,显然有负环. 2.记录从S到当前点路径上经过了多少个点,超过N则有负环.这张图才有N个点,一条路径上没有重复点经过点数是<= N的,所以有负环. 用 t[ ] 表示被迭代多少次 1 #include<iostream> 2

LoadRunner常见问题整理(转)

首先要感谢群友的无私分享,才能得到这篇好的学习资料,整理得太好了,所以收藏保存,方便以后学习. 一:LoadRunner常见问题整理 1.LR 脚本为空的解决方法: 1.去掉ie设置中的第三方支持取消掉 2.在系统属性-高级-性能-数据执行保护中,添加loadrunner安装目录中的vugen.exe文件. 有可能是由于录制的URL地址采用的是localhost的问题,改成分配的IP地址或127.0.0.1试试. 3.插入文本检查点步骤时,使用web_reg_find,通常TextPfx和Tex