社区讨论

ABC335E求助

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lrubn20i
此快照首次捕获于
2024/01/26 15:28
2 年前
此快照最后确认于
2024/01/26 17:20
2 年前
查看原帖
AC71 WA24
CPP
#include<bits/stdc++.h>
#define ll long long
#define ri register long long
#define rll register long long
#define ld long double
#define dd double
#define umap unordered_map
#define pqueue priority_queue
#define inf64 1e18
#define inf32 1e9
#define mkp make_pair
#define pp pair<int,int>
#define endl '\n'
#define int long long
using namespace std;
int n,m,a[200001],head[200001],top,ans[200001];
bool flag[200001];
priority_queue<pp,vector<pp>,greater<pp> > mp[200001];
unordered_map<int,bool> mp2[200001]; 
inline void dfs(int x){
	if(x==n)return;
	for(auto it=mp2[x].begin();it!=mp2[x].end();it++){
		if(ans[it->first]<ans[x]){
			ans[it->first]=ans[x],dfs(it->first);
		}
	}
	while(!mp[x].empty()){
		int y=mp[x].top().second;
		mp[x].pop();
		if(ans[y]<ans[x]+1){
			ans[y]=ans[x]+1;
			dfs(y);
		}
	}
}
signed main(){
	//freopen("test_16.txt","r",stdin);
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(ri i=1;i<=n;i++)cin>>a[i];
	ans[1]=1;
	for(ri i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		if(a[u]<a[v])mp[u].push(mkp(a[v],v));
		else if(a[u]>a[v])mp[v].push(mkp(a[u],u));
		else mp2[u][v]=mp2[v][u]=1;
	}
	dfs(1);
	cout<<ans[n];
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...