求助今晚ABC335E
  • 板块学术版
  • 楼主Butterfly_qwq
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/1/6 22:03
  • 上次更新2024/1/7 09:51:37
查看原帖
求助今晚ABC335E
663638
Butterfly_qwq楼主2024/1/6 22:03
#include<bits/stdc++.h>
using namespace std;
int a[200005],dp[200005],u[200005],v[200005],d[200005];
vector<int> g[200005];
int find(int u)
{
	if(d[u]==u)return u;
	return d[u]=find(d[u]);
}
int dfs(int u)
{
	if(dp[u])return dp[u];
	for(int v:g[u])dp[u]=max(dp[u],dfs(v)+1);
	return dp[u];
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		d[i]=i;
	}
	for(int i=1;i<=m;i++)cin>>u[i]>>v[i];
	for(int i=1;i<=m;i++)if(a[u[i]]==a[v[i]])d[u[i]]=d[v[i]]=max(d[u[i]],d[v[i]]);
	for(int i=1;i<=n;i++)d[i]=find(d[i]);
	for(int i=1;i<=m;i++)
	{
		if(a[u[i]]>a[v[i]])g[d[u[i]]].push_back(d[v[i]]);
		if(a[u[i]]<a[v[i]])g[d[v[i]]].push_back(d[u[i]]);
	}
	dp[d[1]]=1;
	cout<<dfs(n);
}

AC 45 WA 50样例全过了

看了一下发现应该是全AT唯一这么错的人

2024/1/6 22:03
加载中...