wa两个点求调
查看原帖
wa两个点求调
1106462
aa_2315楼主2024/4/5 13:03
#include<iostream>
#include<vector>
using namespace std;
int n, m;
const int N = 1e6 + 10;
int d[N],p[N];
vector<int>arr[N];
void dfs(int x)
{
	d[x] = x;
	for(auto i:arr[x])
	d[x]=max(d[x],i);
	for (auto i : arr[x])       
	{
		if (d[i] == 0)
			dfs(i);
		d[x] = max(d[x], d[i]);
	}
}
void add(int x)
{
    p[x]=1;
    for(auto i:arr[x])
    {
        if(p[i]==0)
            add(i);
        d[x]=max(d[x],d[i]);
    }
}
int main()
{
	cin >> n >> m;
	while (m--)
	{
		int x, y;
		cin >> x >> y;
		arr[x].push_back(y);
	}
	for (int i = 1;i<=n;i++)
	{
	    if(d[i]==0)
	    {
			dfs(i);
			add(i);
	    }
	}
	for (int i = 1;i <= n;i++)
    cout <<d[i]<< " ";
}
2024/4/5 13:03
加载中...