为什么改了个输出就对了
查看原帖
为什么改了个输出就对了
932039
lzy20091001楼主2024/3/21 23:21
#include <cstring>
#include <iostream>

struct Edge
{
    int to, nxt;
};

int edge_cnt;
int head[1005], ans[1005];
bool vis[1005];
Edge graph[1005];

void add(int u, int v)
{
    graph[edge_cnt].to = v;
    graph[edge_cnt].nxt = head[u];
    head[u] = edge_cnt++;
}

void dfs(int r, int u)
{
    vis[u] = true;
    ans[r] = std::max(ans[r], u);
    for (int i = head[u]; i != -1; i = graph[i].nxt)
    {
        int v = graph[i].to;
        if (!vis[v])
            dfs(r, v);
    }
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    int n, m;

    std::cin >> n >> m;
    memset(head, -1, 4 * (n + 1));
    for (int i = 1; i <= m; i++)
    {
        int u, v;
        std::cin >> u >> v;
        add(u, v);
    }

    for (int i = 1; i <= n; i++)
    {
        memset(vis, false, 4 * (n + 1));
        dfs(i, i);
        std::cout << ans[i] << " ";
    }

    std::cout << "\n";

    return 0;
}

WA:

#include <iostream>
#include <cstring>

struct Edge
{
    int to, nxt;
};

int edge_cnt;
int head[1005], ans[1005];
bool vis[1005];
Edge graph[1005];

void add(int u, int v)
{
    graph[edge_cnt].to = v;
    graph[edge_cnt].nxt = head[u];
    head[u] = edge_cnt++;
}

void dfs(int r, int u)
{
    vis[u] = true;
    ans[r] = std::max(ans[r], u);
    for (int i = head[u]; i != -1; i = graph[i].nxt)
    {
        int v = graph[i].to;
        if (!vis[v])
            dfs(r, v);
    }
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    int n, m;

    std::cin >> n >> m;
    memset(head, -1, 4 * (n + 1));
    for (int i = 1; i <= m; i++)
    {
        int u, v;
        std::cin >> u >> v;
        add(u, v);
    }

    for (int i = 1; i <= n; i++)
    {
        memset(vis, false, 4 * (n + 1));
        dfs(i, i);
    }

    for (int i = 1; i <= n; i++)
        std::cout << ans[i] << " ";
    std::cout << "\n";

    return 0;
}
2024/3/21 23:21
加载中...