wa on #1 #15, 90pts求调
查看原帖
wa on #1 #15, 90pts求调
422507
Fla_Akebono楼主2024/2/29 17:08
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;

int const MAXN = 6e5;

struct node
{
    int L, R;
    int O, C;
    int to;
    int wight;
};
vector<node> edge[MAXN];
int f[MAXN];
int n, m, s;
bool vis[MAXN], vis1[MAXN];
int T;

void dfs(int l, int r, int now)
{
    vis[now] = 1;
    vis1[now] = 1;

    if (f[now] != 0)
    {
        f[now] = min(r, f[now]);
    }
    else
    {
        f[now] = r;
    }

    for (auto p : edge[now])
    {
        if (p.to == s || p.to == now || vis1[p.wight])
        {
            continue;
        }
        if (l >= p.O && r <= p.C)
        {
            vis1[p.wight] = 1;
            dfs(p.L, p.R, p.to);
        }
    }
    return;
}

int main()
{
    scanf("%d %d %d", &n, &m, &s);
    node x{};
    int sl{}, sr{}, u{}, v{};
    for (int i = 1; i <= m; i++)
    {
        scanf("%d %d %d %d %d %d", &u, &v, &x.O, &x.C, &x.L, &x.R);
        x.wight = i;
        x.to = v;
        edge[u].push_back(x);
        if (v == s)
        {
            sl = x.L;
            sr = x.R;
        }
    }
    dfs(sl, sr, s);
    f[s] = 0;
    for (int i = 1; i <= n; i++)
    {
        if (vis[i])
        {
            T = max(T, f[i]);
        }
    }
    printf("%d\n", T);
    //system("pause");
    return 0;
}
2024/2/29 17:08
加载中...