第三题的优化暴力
#include <iostream>
#include <set>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
int no=1;
map<string,int> mp;
int get_n(string &s) {
if(mp.count(s)) return mp[s];
mp[s] = no++;
return mp[s];
}
int stno;
vector<vector<int>> vvs;
vector<int> one;
map<int,vector<int>> mpone;
void get_va(int d) {
vvs.resize(d);
getchar();
for(int i=0;i<d;i++){
string tmp;
getline(cin,tmp);
while(tmp.size()) {
auto p = find(tmp.begin(),tmp.end(),',');
if(p==tmp.end()){
int n=get_n(tmp);
// if(n==stno) one.push_back(i);
if(mpone.count(n)) {
mpone[n].push_back(i);
}else{
mpone[n]=vector<int>{i};
}
vvs[i].push_back(n);
break;
}else{
int pos = p-tmp.begin();
string t =tmp.substr(0,pos);
int n=get_n(t);
if(mpone.count(n)) {
mpone[n].push_back(i);
}else{
mpone[n]=vector<int>{i};
}
if(n==stno) one.push_back(i);
vvs[i].push_back(n);
tmp=tmp.substr(pos+1);
}
}
}
return ;
}
int main() {
string s;
int d;
cin>>s;
cin>>d;
stno = get_n(s);
get_va(d);
// for(auto v: mpone) {
//// for(auto n: v.second) cout<<n<<" ";cout<<endl;
// }
vector<bool> vst(no,false);
set<int> st;
for(auto v:mpone[stno]) {
for(int i : vvs[v]) {
st.insert(i);
vst[i] = true;
}
}
set<int> allk;
for(auto v: st) {
for(auto n:mpone[v]){
allk.insert(n);
}
}
for(auto n: allk) {
for(auto v: vvs[n]) {
vst[v] = true;
}
}
int ans = 0;
for(auto v: vst) {
if(v==true) {
ans++;
}
}
cout<<ans;
return 0;;
}