P3916 图的遍历

题目描述

给出 N 个点, M 条边的有向图,对于每个点 v ,求 A(v) 表示从点 v 出发,能到达的编号最大的点。

输入输出格式

输入格式:

第1 行,2 个整数 N,MN,M 。

接下来 M 行,每行2个整数 U_i,V_i,表示边 (U_i,V_i)。点用 1,2,⋯,N 编号。

输出格式:

N 个整数 A(1),A(2),⋯,A(N) 。

输入输出样例

输入样例#1:

4 3
1 2
2 4
4 3
输出样例#1:

4 4 3 4

说明

• 对于60% 的数据, 1 <= N . M <= 10^3 ;

• 对于100% 的数据,1 <= N , M <= 10^5。

  今晚看偶然LXL dalao 在努力钻研着这个题,去和他研究了一会于是乎对这题产生了兴趣。

  问了一圈人好像都是40,50,60分,还被个人嘲讽了(原因是我没做)。

  独自静静回到电脑前,开始肆无忌惮的敲着代码,看着好像不是挺难。

  貌似不太对哦,好像不是辣么简单。

  要不先打个60分玩玩(额...60分好像不会写),要不....打正解?(.....)

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
const int maxn=;
int tot,head[maxn];
int n,m,x,y;
int f[maxn];
struct ahah{
int nxt,to;
}edge[maxn];
void add(int x,int y) // 灵光一闪,反向建边。
{
edge[++tot].nxt=head[y];edge[tot].to=x;head[y]=tot;
}
void dfs(int x,int d) // dfs遍历能跑到哪?
{ // d记录初始点(是有哪个点开始跑)
if(!f[x])f[x]=x;
for(int i=head[x];i;i=edge[i].nxt)
{
if(!f[edge[i].to])f[edge[i].to]=d,dfs(edge[i].to,d);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)scanf("%d%d",&x,&y),add(x,y);
for(int i=n;i>=;i--)dfs(i,i); // 要找跑到最大的点,所以反响跑最优。
for(int i=;i<=n;i++)printf("%d ",f[i]);
}

luogu P3916 图的遍历的更多相关文章

  1. Luogu P3916 图的遍历 【优雅的dfs】【内有待填坑】By cellur925

    说明 • 对于60% 的数据, n,m在1e3内 • 对于100% 的数据, n,m在1e5内. 本弱弱上来就是一顿暴搜打,dfs n次,每次更新答案,复杂度为O(n*n),果然TLE,60分抱回家. ...

  2. Java实现 洛谷 P3916 图的遍历(反向DFS+记忆化搜索)

    P3916 图的遍历 输入输出样例 输入 4 3 1 2 2 4 4 3 输出 4 4 3 4 import java.io.BufferedReader; import java.io.IOExce ...

  3. 洛谷P3916 图的遍历 [图论,搜索]

    题目传送门 图的遍历 题目描述 给出 N 个点, M条边的有向图,对于每个点 v ,求 A(v) 表示从点 v 出发,能到达的编号最大的点. 输入输出格式 输入格式: 第1 行,2 个整数 N,M . ...

  4. 洛谷P3916 图的遍历

    题目链接:https://www.luogu.org/problemnew/show/P3916 题目大意 略. 分析 以终为始,逆向思维. 代码如下 #include <bits/stdc++ ...

  5. P3916 图的遍历 题解

    原题链接 简要题意: 求从每个点开始,可以到达的编号最大的点. 我们只要发现一条性质,这题就变得挺简单了. 你想,如果从每个点开始走,分别遍历,肯定是不科学的. 因为是有向图,所以当前点 \(x\) ...

  6. Luogu P43916 图的遍历

    我们把"u点能够到达的最大点"转化为反向图中能到达u点的所有点里的最大值,可知缩点后满足无后效性.val[i]的初值设为连通分量i中的最大点.反向存图,tarjan缩点,拓扑序dp ...

  7. 洛谷P3916||图的遍历||反向建图||链式前向星||dfs

    题目描述 给出 NN 个点, MM 条边的有向图,对于每个点 vv ,求 A(v)A(v) 表示从点 vv 出发,能到达的编号最大的点. 解题思路 看起来很简单的一道题, 但我依然调了一天,我还是太菜 ...

  8. P3916 图的遍历

    题目描述 给出 NNN 个点, MMM 条边的有向图,对于每个点 vvv ,求 A(v)A(v)A(v) 表示从点 vvv 出发,能到达的编号最大的点. 输入输出格式 输入格式: 第1 行,2 个整数 ...

  9. 洛谷p3916图的遍历题解

    题面 思路: 反向建边,dfs艹咋想出来的啊 倒着遍历,如果你现在遍历到的这个点已经被标记了祖先是谁了 那么就continue掉 因为如果被标记了就说明前面已经遍历过了 而我们的顺序倒着来的 前边的一 ...

随机推荐

  1. Codeforces - 559B - Equivalent Strings - 分治

    http://codeforces.com/problemset/problem/559/B 这个题目,分治就好了,每次偶数层可以多一种判断方式,判断它的时间就是logn的(吧),注意奇数层并不是直接 ...

  2. EOJ3263:丽娃河的狼人传说(贪心)

    传送门 题意 分析 考虑将区间按右端点排序,再遍历区间,操作即可 建议以加方式写 trick 1.不需要判区间重合 代码 #include<cstdio> #include<cstr ...

  3. PTA 螺旋方阵

    所谓"螺旋方阵",是指对任意给定的NNN,将1到N×NN\times NN×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×NN\times NN×N的方阵里.本题要求 ...

  4. bzoj 3667: Rabin-Miller算法【Miller-Rabin】

    Miller-Rabin模板 #include<iostream> #include<cstdio> #include<algorithm> using names ...

  5. hdu3926 Hand in Hand 同构图

    #include<cstring> #include<cstdio> #include<algorithm> using namespace std; ]; str ...

  6. noip初赛

    运算符       联结词名称 异或 ⊕       非¬(-)     否定 与∧(·) 对应集合∩交集 对应按位与符号& 合取 或∨(+) 对应集合∪并集 对应按位或符号| 析取 条件→ ...

  7. JS与JQ绑定事件的几种方式.

    JS与JQ绑定事件的几种方式 JS绑定事件的三种方式 直接在DOM中进行绑定 <button onclick="alert('success')" type="bu ...

  8. MySql数据基本操作sql语句

    表字段 1>插入数据insert 如果不插入id,让id自动增加 INSERT INTO `gpw_group`(group_code, group_parent_id, group_name, ...

  9. PKU_campus_2017_K Lying Island

    思路: 题目链接http://poj.openjudge.cn/practice/C17K/ 状压dp.dp[i][j]表示第i - k人到第i人的状态为j的情况下前i人中最多有多少好人. 实现: # ...

  10. Web前端攻防,一不小心就中招了

    随着各浏览器安全功能的提高,前端防御面临的问题也没有之前那么复杂,但浏览器的防御措施并不能百分百的保证网站的安全. 浏览器的XSS Auditor,使得反射型xss几乎被废:CSP(Content-S ...