Codeforces Round #693 (Div. 3) G. Moving to the Capital (图,dp)


- 题意:有一张有向图,每个点的权值为点\(1\)到该点的最短距离(每条边的长度为\(1\)),对于一条路径,这条路径上最多只能有一条边,这条边起点的权值不小于终点,现在要求每个点能到达路径上的点的最小权值.
 - 题解:首先我们先用bfs求出每个点的权值,并且在求的同时用桶将点存起来,方便之后枚举权值的时候用,然后我们可以将权值从大到小枚举,记\(dp_i\)是当前这个点能到达路径上的点的最小权值,对于当前的点\(u\)和它的出边\(v\),如果\(dis[u] < dis[v]\),那么我们是可以继续随便走的,所以当前状态应该是\(dp[u]=min(dp[u],dp[v])\),否则,说明我们将第二次机会用掉了,之后就只能选择第一种操作,所以我们更新的时候就不能将\(dp[v]\)(因为是从大到小枚举,所以\(dp[v]\)的状态一定是已知的)更新给当前状态,因为我们不知道\(dp[v]\)这个状态是否还用了第二次操作,所以当前状态就应该更新为\(dp[u]=min(dp[u],dis[v])\).
 - 代码:
 
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define me memset
#define rep(a,b,c) for(int a=b;a<=c;++a)
#define per(a,b,c) for(int a=b;a>=c;--a)
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
using namespace std;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b) {return a/gcd(a,b)*b;}
int t;
int main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>t;
	while(t--){
		int n,m;
		cin>>n>>m;
		vector<vector<int>> v(n+1);
		vector<vector<int>> tot(n+1);
		vector<int> dis(n+1,INF);
		vector<int> dp(n+1);
		int a,b;
		rep(i,1,m){
			cin>>a>>b;
			v[a].pb(b);
		}
		queue<int> q;
		q.push(1);
		dis[1]=0;
		//bfs init
		while(!q.empty()){
			int cur=q.front();
			q.pop();
			for(auto w : v[cur]){
				if(dis[cur]+1<dis[w]){
					dis[w]=dis[cur]+1;
					tot[dis[w]].pb(w);
					q.push(w);
				}
			}
		}
		rep(i,1,n){
			dp[i]=dis[i];
		}	
		per(i,n-1,1){
			for(auto u : tot[i]){
				for(auto w : v[u]){
					if(dis[w]>dis[u]) dp[u]=min(dp[u],dp[w]);
					else dp[u]=min(dp[u],dis[w]);
				}
			}
		}
		rep(i,1,n) cout<<dp[i]<<' ';
		cout<<'\n';
	}
    return 0;
}
												
											Codeforces Round #693 (Div. 3) G. Moving to the Capital (图,dp)的更多相关文章
- Codeforces Round #582 (Div. 3)-G. Path Queries-并查集
		
Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...
 - Codeforces Round #547 (Div. 3) G 贪心
		
https://codeforces.com/contest/1141/problem/G 题意 在一棵有n个点的树上给边染色,连在同一个点上的边颜色不能相同,除非舍弃掉这个点,问最少需要多少种颜色来 ...
 - Codeforces Round #541 (Div. 2) G dp + 思维 + 单调栈 or 链表 (连锁反应)
		
https://codeforces.com/contest/1131/problem/G 题意 给你一排m个的骨牌(m<=1e7),每块之间相距1,每块高h[i],推倒代价c[i],假如\(a ...
 - Codeforces Round #481 (Div. 3)  G. Petya's Exams
		
http://codeforces.com/contest/978/problem/G 感冒是真的受不了...敲代码都没力气... 题目大意: 期末复习周,一共持续n天,有m场考试 每场考试有如下信息 ...
 - Codeforces Round #346 (Div. 2) G. Fence Divercity dp
		
G. Fence Divercity 题目连接: http://www.codeforces.com/contest/659/problem/G Description Long ago, Vasil ...
 - Codeforces Round #677 (Div. 3) G. Reducing Delivery Cost(dijkstra算法)
		
题目链接:https://codeforces.com/contest/1433/problem/G 题解 跑 \(n\) 遍 \(dijkstra\) 得到任意两点间的距离,然后枚举哪一条边权为 \ ...
 - Codeforces Round #396 (Div. 2) A B C D 水 trick dp 并查集
		
A. Mahmoud and Longest Uncommon Subsequence time limit per test 2 seconds memory limit per test 256 ...
 - Codeforces Round #374 (Div. 2) A B C D 水 模拟  dp+dfs  优先队列
		
A. One-dimensional Japanese Crossword time limit per test 1 second memory limit per test 256 megabyt ...
 - Codeforces Round #386 (Div. 2)G. New Roads [构造][树]
		
题目链接:G. New Roads 题意:给出n个结点,t层深度,每层有a[i]个结点,总共有k个叶子结点,构造一棵树. 分析: 考虑一颗树,如果满足每层深度上有a[i]结点,最多能有多少叶子结点 那 ...
 
随机推荐
- cts project的创建修改和删除
			
事务码:SPRO_ADMIN进入 项目管理界面,点击工具栏创建项目(F5),弹出对话框,输入项目名称,回车确定. 标题中输入项目的描述.点击保存.如图: 点击图片放大 注:要想此项目在CTS建立请求的 ...
 - 1.5V升3V芯片和电路图,DC-DC升压IC
			
1.5V升3V的升压芯片,3V给LED供电,或者单片机模块供电等. PW5200A工作频率为1.4MHZ.轻载时自动PWM/PFM模式切换,提高效率. PW5200A能够提供2.5V和5V之间的可调输 ...
 - 转 Jmeter测试实践:文件下载接口
			
Jmeter测试实践:文件下载接口 一 Jmeter步骤 1.打开jmeter4.0,新建测试计划,添加线程组.根据实际情况配置线程属性. 2.添加HTTP请求.根据接口文档进行配置. Basic ...
 - 浅析鸿蒙中的 Gn 与 Ninja(一)
			
目录: Ninja简介 make 的 3 个特性 举例说明Ninja 的用法 如何向构建工具 Ninja 描述构建图 后记 鸿蒙系统的编译构建是基于 Gn 和 Ninja 完成的,那么 Gn 和 Ni ...
 - 计算机网络第7版 PDF+ 计算机网络释疑与习题解答第7版 PDF 计算机网络 课后答案
			
网上全都是要钱的,要么就是第六版的,属实被恶心到了. 链接:https://pan.baidu.com/s/15jCOH6LXnQfB1RwGpNgBFg提取码:byMB
 - 布隆过滤器 数据同步业务 :google-guava+spring-boot-api+mybatis, 缺失值全匹配查找
			
布隆过滤器 数据同步业务 :google-guava+spring-boot-api+mybatis, 缺失值全匹配查找
 - 逃逸分析与栈、堆分配分析   escape_analysis
			
小结: 1.当形参为 interface 类型时,在编译阶段编译器无法确定其具体的类型.因此会产生逃逸,最终分配到堆上. 2.The construction of a value doesn't d ...
 - 变量隐藏Accidental Variable Shadowing
			
6.5 - Variable shadowing (name hiding) | Learn C++ https://www.learncpp.com/cpp-tutorial/variable-sh ...
 - 强制杀死进程后,进程相关的socket未必发送RST
			
强制杀死进程后,进程相关的socket未必发送RST
 - chmod a+w .  权限控制    su、sudo  修改文件所有者和文件所在组  添加用户到sudoer列表中   当前用户信息
			
对当前目录对所有用户开放读写权限 chmod a+r . $ sudo chmod -R a+w /usr/lib/python2.7 所有用户添加文件的写权限 [linux]su.sudo.sudo ...