Codeforces Round #693 (Div. 3) G. Moving to the Capital (图,dp)
2024-10-08 07:41:19
- 题意:有一张有向图,每个点的权值为点\(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;
}
最新文章
- nginx+tomcat https实践
- Kali Linux渗透基础知识整理(一):信息搜集
- Java解析HTML之HTMLParser使用与详解
- Linux 字符设备控制技术
- 【Android】还原“微信”apk中的“发现”和“我”两个模块
- JavaSE学习总结第18天_集合框架4
- SAP HANA 是什么?
- Markdown简明教程
- jquery参考手册
- 自定义页面微信、微博、QQ分享效果
- python 常用技巧
- 9、js扩展
- Cf Round #403 B. The Meeting Place Cannot Be Changed(二分答案)
- vue之component
- Shiro学习笔记五(Shiro标签,及通配符)
- 客户端负载均衡Ribbon之一:Spring Cloud Netflix负载均衡组件Ribbon介绍
- 03-02_配置weblogic domain
- [Deepin 15] 编译安装 MySQL-5.6.35
- Android性能优化系列之App启动优化
- 机器学习 Numpy库入门
热门文章
- Docker Java 镜像基础(四)
- Openstack OCATA 安装环境说明(一) 未完成版本
- (二)数据源处理4-excel部分封装及数据转换
- 关于QTableWidget中单元格拖拽实现
- Android之Xposed
- px转rem的填坑之路
- MongoDB数据库,一些的筛选过滤查询操作和db.updae()更新数据库记录遇到的坑。
- Java高并发与多线程(四)-----锁
- LSM(Log Structured Merge Trees ) 笔记
- python-列表包字典-根据字典的某一个键的值来进行排序