题目链接:Problem - G - Codeforces

题目大意:给定一张n个节点m条边的图,定义d数组为每个结点到结点1的距离。

每次可以选择两个操作:1,跳到结点x,dx>d当前 2.跳到结点x,dx<=d当前

注意:操作2最多只能执行1次。求每个点经过操作后到结点1的最小距离
考察知识点:树的广搜,dp思维

题解:首先我们先对树进行广搜,计算出每个点到根节点的距离,然后我们根据距离从大到小进行遍历。对于父亲结点u和儿子节点v,如果d[u]<d[v],f[u]=min(f[u],f[v])  (f数组为最终答案)。否则

f[u]=min(f[u],d[v]),这里是dv的原因是从距离远的跳到距离近的只能跳一次,跳完以后要往大的更新,所以最后f[v]是要大于f[u]的,那么这里选择dv是正确的。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
vector<int>g[maxn],c[maxn];
int vis[maxn], d[maxn],res[maxn];
void solve()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; i++){g[i].clear();c[i].clear();}int x, y;for (int i = 1; i <= m; i++){cin >> x >> y;g[x].push_back(y);}memset(vis, 0, sizeof(vis));queue<int>q;q.push(1);vis[1] = 1;while (q.size()){int u = q.front();q.pop();c[d[u]].push_back(u);int len = g[u].size();for (int i = 0; i < len; i++){int v = g[u][i];if (vis[v])continue;d[v] = d[u] + 1;vis[v] = 1;q.push(v);}}/*for (int i = 1; i <= n; i++)cout << d[i] << " ";*/for (int i = 1; i <= n; i++)res[i] = d[i];for (int l = n - 1; l >= 0; --l) {            // 由远到近遍历每一点int num = c[l].size();for (int i = 0; i < num; ++i) {int u = c[l][i];int len = g[u].size();for (int j = 0; j < len; ++j) {int v = g[u][j];if (d[u] < d[v]) res[u] = min(res[u], res[v]);else res[u] = min(res[u], d[v]);}}}for (int i = 1; i <= n; ++i) printf("%d ", res[i]);printf("\n");}
int main()
{int t;cin >> t;while (t--){solve();}
}

Codeforces Round #693 (Div. 3)G. Moving to the Capital相关推荐

  1. Codeforces Round #693 (Div. 3) G. Moving to the Capital dp + 思维

    传送门 题意: 给一个图,111号点为中心点,定义dis[i]dis[i]dis[i]表示111号点到iii的距离.现在有三种移动方式 (1)(1)(1)从iii移动到jjj且dis[i]<di ...

  2. Codeforces Round #693 (Div. 3)A~G解题报告

    Codeforces Round #693 (Div. 3)A~G解题报告 A Cards for Friends 原题信息 http://codeforces.com/contest/1472/pr ...

  3. Codeforces Round #693 (Div. 3)部分题解

    Codeforces Round #693 (Div. 3) 部分题解 D. Even-Odd Game 思路: 贪心:田忌赛马 (1)先将数组从大到小排序,取数时从大到小取,用一个ans变量记录取数 ...

  4. Codeforces Round #644 (Div. 3) G.A/B Matrix

    Codeforces Round #644 (Div. 3) G.A/B Matrix 题目链接 You are given four positive integers n, m, a, b (1≤ ...

  5. Codeforces Round #731 (Div. 3) G. How Many Paths? dfs + 拓扑 + 思维

    传送门 题意: 给你一张nnn个点mmm条边的图,让你对每个点确定一个编号,规则如下: (1)(1)(1) 对于不能到的点编号为000. (2)(2)(2) 对于只有一条路径能到这个点的点编号为111 ...

  6. Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)

    传送门 文章目录 题意: 思路: 题意: 思路: 史上最水GGG题,没有之一. 考虑最小的情况如何构造,显然就是让a,ba,ba,b都1−n1-n1−n依次排列即可,这样的最小值为n∗(n+1)2\f ...

  7. Codeforces Round #725 (Div. 3) G. Gift Set 二分

    传送门 文章目录 题意: 思路: 题意: 有两种物品分别有x,yx,yx,y个,每次可以从一个拿出aaa个,另一个拿出bbb个分成一组,问最多能分成多少组. 思路: 这个题有一个显然的单调性,所以二分 ...

  8. Codeforces Round #827 (Div. 4) G. Orray

    Problem - G - Codeforces 题意: 给定一个数列,让你重新排列这个数列,使得其前缀或最大 思路: 贪心策略就是找一个与pre或起来最大的值 重点是怎么写呢 感觉div4的题思路都 ...

  9. Codeforces Round #827 (Div. 4) G. Orray 解题报告

    原题链接: Problem - G - Codeforces 题目描述: You are given an array aa consisting of nn nonnegative integers ...

最新文章

  1. 嵌入式多媒体设计7--QDockWidget大小调整及隐藏标题
  2. 数学建模中的matlab实例,matlab数学建模实例
  3. mysql使用 CONCAT(字段,字段) 函数拼接
  4. 2019年12月计算机统考答案,2019年12月计算机等级WPS考前冲刺练习题及答案
  5. Mybatis学习(2)—— 对象关系映射
  6. PHP第三方易宝支付对接
  7. 网络计算机和弱电,弱电工程师和网络工程师的区别,你知道吗?
  8. python求15 17 23 65 97的因数_Python练习题
  9. Dreamweaver 网页设计作业静态模板
  10. 冰点还原 7.20.20.3398 For Win2003 支持2TB硬盘版下载,附KEY和修改方法
  11. 网易不进垃圾箱html,腾讯QQ、网易126、163邮箱发送邮件进入垃圾箱及收不到邮件怎么办?...
  12. 群体遗传分析—LD连锁不平衡
  13. C++ 实时显示7z压缩与解压缩的进度
  14. 2.4g和5g要不要合并_无线路由2.4g和5g要同时开吗
  15. Android音频子系统(十一)------耳机返听(耳返)原理实现
  16. oracle 使用trigger实现主键自增
  17. XAMPP的下载、安装、配置
  18. npj | 宁波大学张德民团队揭示对虾生物絮团养殖系统细菌群落的调控机制
  19. 排列组合公式 与24点编程游戏
  20. mmdetection3D RuntimeError: Error compiling objects for extension

热门文章

  1. 美国芯片搬起石头砸自己的脚,芯片行业雪崩,将面临更严峻的考验
  2. 印尼飞机失事 60多条人命 如果我们身在其中最后一刻会有什么遗憾
  3. Harbor整体架构
  4. pygame.display.flip()和pygame.display.update()的区别:
  5. [2018.12.4]斜率优化(以[Apio2010]特别行动队为例)
  6. 必须有下列压缩分卷才能继续解压
  7. 【转帖】[职业经历]外资企业面试,英语测试的类型和体会
  8. java 蚁群算法_Java蚁群算法(Ant Colony)求解旅行商问题(TSP)(二)
  9. 计算机的分类,按设计目的,按大小划分
  10. 安装远程连接软件TeamViewer的详细教程