求助ABC E
  • 板块学术版
  • 楼主rhn7
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/1/6 21:44
  • 上次更新2024/1/7 07:17:09
查看原帖
求助ABC E
760998
rhn7楼主2024/1/6 21:44
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+5;
ll n,m,u,v,a[N],dp[N],cnt,vis[N];
vector<ll> adj[N],num[N],t[N];
void dfs(ll x){
    t[cnt].push_back(x);
    vis[x]=1;
    for(ll i:adj[x]){
        if(a[i]==a[x]&&!vis[i]) dfs(i);
    }
}
int main(){
	scanf("%lld%lld",&n,&m);
	for(ll i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		num[a[i]].push_back(i);
        dp[i]=-1e15;
	}
	while(m--){
		scanf("%lld%lld",&u,&v);
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
    for(ll i=1;i<=200000;i++){
        for(ll id:num[i]){
            if(!vis[id]) cnt++,dfs(id);
        }
    }
	for(ll i=1;i<=cnt;i++){
		ll res=(a[1]==a[t[i][0]])?1:-1e15;
		for(ll id:t[i]){
			for(ll j:adj[id]) res=max(res,dp[j]+1);
		}
		for(ll id:t[i]) dp[id]=res;
	}
	printf("%lld",max(0ll,dp[n]));
	return 0;
}

95个点 WA 1个点啊啊啊

2024/1/6 21:44
加载中...