题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=890&pid=1003
解题思路:
暴力,map<node, vector<int> >
map第一维是记录时间地点,第二维记录在这个时间地点有哪些元素。如果被感染就标记一下。
代码:</int>
#include<bits/stdc++.h> using namespace std; const int N = 2e4+7; struct node{ int t, p; bool operator < (const node &a) const { if(t == a.t) return p < a.p; return t < a.t; } }; map<node , vector<int> > mp; bool vis[N]; int main() { int T; scanf("%d",&T); while(T--) { mp.clear(); memset(vis, 0, sizeof(vis)); int n; scanf("%d",&n); for(int i = 1; i <= n; i++) { int a; scanf("%d",&a); for(int j = 1; j <= a; j++) { int t, p; scanf("%d%d",&t,&p); mp[{t,p}].push_back(i); } } vis[1] = 1; for(auto it = mp.begin(); it != mp.end(); it++) { int siz = it->second.size(); for(int i = 0; i < siz; i++) { if(vis[it->second[i]]) { for(int j = 0; j < siz; j++) { vis[it->second[j]]=1; } break; } } } for(int i = 1; i <= n; i++) { if(vis[i]) printf("%d ",i); } printf("\n"); } }