# 題目

zerojudge k734. 4. 開啟寶盒

# 解題思路

目前沒東西...

# 程式碼

#include <bits/stdc++.h>    
using namespace std;
#define N 100005
bool keyvisit[N];
int n,m,k,t,indeg[N],ans;
vector<int> key[N],point[N],start;
void dfs(int p){
    if(indeg[p]==0) return;
    if(--indeg[p]==0){
        ans--;
        for(auto &u:point[p]){
            if(keyvisit[u]) continue;
            keyvisit[u]=1;
            for(auto &v:key[u]){//O(k)
                dfs(v);
            }
        }
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m>>k;
    ans=n;
    cin>>t;
    for(int i=0,temp;i<t;i++){
        cin>>temp;
        start.push_back(temp);
    }
    for(int i=0;i<n;i++){
        indeg[i]=k;
        for(int j=0,u;j<k;j++){
            cin>>u;
            key[u].push_back(i);//key -> point
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0,u;j<k;j++){
            cin>>u;
            point[i].push_back(u);//reward key
        }
    }
    for(auto &u:start){
        if(keyvisit[u]) continue;//
        keyvisit[u]=1;
        for(auto &v:key[u]){
            dfs(v);
        }
    }
    cout<<(n-ans);
}
更新於 閱讀次數 次