关注
#include<bits/stdc++.h>
#include<math.h>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<assert.h>
#include <algorithm>
#define ll long long
#include <time.h>
using namespace std;
//clock_t Begin,End;
//Begin = clock();printf("%dms\n",End-Begin);
int father[2000005];
struct ss{
int next;
int to;
}arr[1000005];
int tot;
void add(int a,int b){
arr[tot].next=father[a];
arr[tot].to=b;
father[a]=tot++;
}
int vis[2000005];
int num[2000005];
int se[1000005];
int dfs(int t){
vis[t]=1;
int tt=-1;
for(int i=father[t];i!=-1;i=arr[i].next){
int to=arr[i].to;
if(vis[to]==0){
tt=max(tt,dfs(to));
}else{
tt=max(tt,num[to]);
}
}
if(tt==-1) return t;
else return num[t]=tt;
}
int max(int a,int b){
return a>b?a:b;
}
int main(){
int n;
scanf("%d",&n);
int a,b;
memset(father,-1,sizeof(father));
int r=0;
for(int i=0;i<n;i++){
scanf("%d %d",&a,&b);
se[++r]=a;
add(a,b);
}
int sum=0;
for(int i=1;i<=r;i++){
if(vis[se[i]]==0){
dfs(se[i]);
sum=max(sum,num[se[i]]-se[i]);
}
// printf("%d\n",num[*ite]);
}
printf("%d\n",sum);
return 0;
} 出题人给的范围不够实际的数要比1000000大,要把数组开大, 数据过多导致set爆掉 dfs过了。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 帮我看看,领导说这话什么意思? #
15620次浏览 87人参与
# 牛友的志愿填报指南 #
33523次浏览 180人参与
# 快手技术岗信息交流阵地 #
127次浏览 0人参与
# 你的mentor是什么样的人? #
12385次浏览 97人参与
# 毕业租房也有小确幸 #
140243次浏览 4491人参与
# 怎么给家人解释你的工作? #
7543次浏览 57人参与
# 得物app工作体验 #
27138次浏览 61人参与
# 租房前辈的忠告 #
259131次浏览 7114人参与
# 国企还是互联网,你怎么选? #
167584次浏览 1191人参与
# 求职中的尴尬瞬间 #
1618次浏览 24人参与
# 小红书求职进展汇总 #
120312次浏览 952人参与
# 薪资爆料 #
199721次浏览 1512人参与
# 校招泡的最久的公司是哪家? #
10170次浏览 66人参与
# 求职低谷期你是怎么度过的 #
10135次浏览 199人参与
# 26届秋招公司红黑榜 #
24132次浏览 87人参与
# 从哪些方向判断这个offer值不值得去? #
12800次浏览 157人参与
# 度小满求职进展汇总 #
11898次浏览 64人参与
# 你觉得mentor喜欢什么样的实习生 #
14815次浏览 392人参与
# 牛客树洞,我想对你说 #
4263次浏览 63人参与
# 还记得你第一次面试吗? #
339970次浏览 3876人参与
# 机械人的秋招小目标 #
22591次浏览 217人参与