能帮我看一看吗(已孑孓(解决))

3. 最大节点

题目ID:8257 必做题100分

时间限制: 1000ms

空间限制: 131072kB

题目描述

时间限制:1s 空间限制:128M

题目描述:

给出 N 个点, M 条边的有向图,对于每个点 v ,求 A(v) 表示从点 v 出发,能到达的编号最大的点。

输入格式:

第一行包含两个整数 N,M

接下来 M 行,每行两个整数 U_i,V_i ​,表示边 <U_i,V_i> 。点用 1,2,⋯,N 编号。

输出格式:

N 个空格分隔的整数 A(1),A(2),⋯ ,A(N)

样例输入:

4 3
1 2
2 4
4 3

样例输出:

4 4 3 4

约定:

1≤N,M≤105

WA0分:

#include <bits/stdc++.h>
#include <vector>
#include <stack>
#include <queue>//作者习惯

using namespace std;

int n,m;
int vis[100005];
vector<vector<int> > G;
int maxn = INT_MIN;

void dfs(int x) {
	maxn = max(maxn,x);
	for(int i = 1;i <= n;i++) {
		if(vis[G[x][i]] == 1){
			continue;
		}
		vis[G[x][i]] = 1;
		dfs(G[x][i]); 
	}
}

int main(int argv,char * argc[])//作者习惯
{
	int n,m;
	cin >> n >> m;
	G.resize(n + 1);
	for(int i = 1;i <= m;i++) {
		int x,y;
		cin >> x >> y;
		if(x != y){
			G[x].push_back(y);
		}
	}
	for(int i = 1;i <= n;i++) {
		maxn = INT_MIN;
		vis[i] = 1;
		dfs(i);
		cout << maxn << " ";
	}
	return 0;
}

1 个赞

@信友队蔡老师 能不能帮我看一下这道题

1 个赞

好吧我自己改出来了

1 个赞