# 題目
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); | |
} |