• 题意:有一张有向图,每个点的权值为点\(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;
}

最新文章

  1. nginx+tomcat https实践
  2. Kali Linux渗透基础知识整理(一):信息搜集
  3. Java解析HTML之HTMLParser使用与详解
  4. Linux 字符设备控制技术
  5. 【Android】还原“微信”apk中的“发现”和“我”两个模块
  6. JavaSE学习总结第18天_集合框架4
  7. SAP HANA 是什么?
  8. Markdown简明教程
  9. jquery参考手册
  10. 自定义页面微信、微博、QQ分享效果
  11. python 常用技巧
  12. 9、js扩展
  13. Cf Round #403 B. The Meeting Place Cannot Be Changed(二分答案)
  14. vue之component
  15. Shiro学习笔记五(Shiro标签,及通配符)
  16. 客户端负载均衡Ribbon之一:Spring Cloud Netflix负载均衡组件Ribbon介绍
  17. 03-02_配置weblogic domain
  18. [Deepin 15] 编译安装 MySQL-5.6.35
  19. Android性能优化系列之App启动优化
  20. 机器学习 Numpy库入门

热门文章

  1. Docker Java 镜像基础(四)
  2. Openstack OCATA 安装环境说明(一) 未完成版本
  3. (二)数据源处理4-excel部分封装及数据转换
  4. 关于QTableWidget中单元格拖拽实现
  5. Android之Xposed
  6. px转rem的填坑之路
  7. MongoDB数据库,一些的筛选过滤查询操作和db.updae()更新数据库记录遇到的坑。
  8. Java高并发与多线程(四)-----锁
  9. LSM(Log Structured Merge Trees ) 笔记
  10. python-列表包字典-根据字典的某一个键的值来进行排序