WA 后7个 qwq
查看原帖
WA 后7个 qwq
1017932
hxjus楼主2024/9/11 22:13
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#define int long long
using namespace std;

int n , m , a[114514] , id[114514] , ans[114514] , cur , dp[114514];
vector<int> v[114514];
queue<int> q;
void get_tp()//拓扑排序
{
    for(int i = 1; i <= n; i++) if(!id[i]) {q.push(i);}
    while(!q.empty())
    {
        int t = q.front();
        q.pop();
        ans[++cur] = t;
        for(int i = 0; i < v[t].size(); i++)
        {
            id[v[t][i]]--;
            if(!id[v[t][i]]) q.push(v[t][i]);
        }
    }
}

int LDD()//二分优化LIS
{
    memset(dp, 0x3f, sizeof dp);
    for(int i = 1; i <= cur; i++)
    {
        int x = upper_bound(dp + 1 , dp + n + 1 , a[ans[i]]) - dp;
        dp[x] = a[ans[i]];
    }
    for(int i = 1; i <= cur; i++)
    {
        if(dp[i] == 0x3f3f3f3f3f3f3f3f)
        {
            return i - 1;
        }
    }
    return n;
}
signed main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int i = 1 , x , y; i <= m; i++)
    {
        cin >> x >> y;
        v[x].push_back(y);
        id[y]++;
    }
    get_tp();
    //for(int i = 1; i <= cur; i++) cout << ans[i] << endl;
    cout << LDD();
    return 0;
}
2024/9/11 22:13
加载中...