#54566: 拓樸排序


11430533@stu.tshs.tp.edu.tw (一孝20周定樂)


#include <bits/stdc++.h>
#define pii pair<int,int>
#define ff first
#define ss second
using namespace std;

int main(void){
    ios::sync_with_stdio(0),cin.tie(0);
    
    int N;
    while (cin>>N){
        vector<int> cost(N+1),indeg(N+1,0);
        vector<int> g[N+1];
        vector<pii> v[N+1];
        queue<int> q;
        
        for (int i=1 ; i<=N ; i++) cin>>cost[i];
        for (int i=1 ; i<=N ; i++){
            int cnt,a,b;
            cin>>cnt;
            while (cnt--){
                cin>>a>>b;
                v[i].push_back({a,b});
                g[a].push_back(i);
                indeg[i] += 1;
            }
        }
        for (int i=1 ; i<=N ; i++) if (!indeg[i]) q.push(i);
        while (!q.empty()){
            int u = q.front();q.pop();
            for (auto [idx,cnt] : v[u]){
                cost[u] += cost[idx]*cnt;
            } 
            for (int x:g[u]){
                indeg[x] -= 1;
                if (!indeg[x]) q.push(x);
            }
        } 
        for (int i=1 ; i<=N ; i++) cout<<cost[i]<<"\n";
    }
}

#54569: Re: 拓樸排序


11430533@stu.tshs.tp.edu.tw (一孝20周定樂)


搞錯題了 這是lis

#include <bits/stdc++.h>
#define pii pair<int,int>
#define ff first
#define ss second
using namespace std;

bool cmp(pii &a,pii &b){
    if (a.ff != b.ff) return a.ff<b.ff;
    return a.ss>b.ss;
}

int main(void){
    ios::sync_with_stdio(0),cin.tie(0);
    
    int N;
    while (cin>>N){
        vector<int> lis;
        vector<pii> v(N);
        for (int i=0 ; i<N ; i++) cin>>v[i].ff>>v[i].ss;
        sort(v.begin(),v.end(),cmp);
        for (int i=0 ; i<N ; i++){
            auto it = lower_bound(lis.begin(),lis.end(),v[i].ss);
            if (it == lis.end()) lis.push_back(v[i].ss);
            else *it = v[i].ss;
        }
        cout<<lis.size()<<"\n";
    }
}