double val[maxn][maxn]; bool g[maxn]; int n,m; vector<vector<int> > pic; vector<int > af,bf; string s1,s2; int a,b; double max_a_f, max_b_f, max_a_b;
intgetInt(string s){ if(s[0] == '-') s = s.substr(1,s.length()-1); int res = 0; for(int i = 0 ; i < s.length() ; i ++){ res = res*10 + s[i] - '0'; } return res; }
voidinit(){ cin.tie(0),cout.tie(0),ios::sync_with_stdio(false); cin>>n>>m; while(m--){ int k;cin>>k; vector<int > v; for(int i = 1 ; i <= k ; i ++){ string s; cin>>s; int idx = getInt(s); g[idx] = (s[0] != '-'); v.push_back(idx); } pic.push_back(v); } }
voidsolve(){ cin>>s1>>s2; a = getInt(s1); b = getInt(s2); for(auto v : pic){ bool ia = false; bool ib = false; for(auto it : v){ if(it == a) ia = true; if(it == b) ib = true; } if(ia){ for(auto it : v){ val[a][it] += 1.0/v.size(); } } if(ib){ for(auto it : v){ val[b][it] += 1.0/v.size(); } } } for(int i = 0 ; i < n ; i ++){ if(g[i] != g[a]){ if(val[a][i] > max_a_f){ max_a_f = val[a][i]; af.clear(); af.push_back(i); }elseif(val[a][i] == max_a_f){ af.push_back(i); } } if(g[i] != g[b]){ if(val[b][i] > max_b_f){ max_b_f = val[b][i]; bf.clear(); bf.push_back(i); }elseif(val[b][i] == max_b_f){ bf.push_back(i); } } } }