1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include<bits/stdc++.h> #define pf printf #define sc(x) scanf("%d", &x) #define scs(x) scanf("%s", x) #define scl(x) scanf("%lld", &x) #define mst(a,x) memset(a, x, sizeof(a)) #define rep(i,s,e) for(int i=s; i<e; ++i) #define dep(i,e,s) for(int i=e; i>=s; --i) using namespace std; typedef long long ll; typedef pair<int,int> pii; const int maxn = 1e5 + 5; int q[3][maxn]; vector<int>vv[6]; int main(){ int n,k,m,a,cnt(0); sc(n); sc(k); rep(i,0,k){ sc(m); rep(j,0,m) sc(a),q[i][a]++; } if(k==1) pf("%d",m); else if(k==2){ rep(i,1,n+1){ if(q[0][i]+q[1][i]==2) cnt++; else if(q[0][i]) vv[0].push_back(i); else if(q[1][i]) vv[1].push_back(i); } cnt+=max(vv[0].size(),vv[1].size()); pf("%d\n",cnt); } else if(k==3){ rep(i,1,n+1){ if(q[0][i]+q[1][i]+q[2][i]==3) cnt++; else if(q[0][i]+q[1][i]+q[2][i]==2){ if(q[0][i]&&q[1][i]) vv[0].push_back(i); if(q[0][i]&&q[2][i]) vv[1].push_back(i); if(q[1][i]&&q[2][i]) vv[2].push_back(i); } else if(q[0][i]+q[1][i]+q[2][i]==1){ if(q[2][i]) vv[3].push_back(i); if(q[1][i]) vv[4].push_back(i); if(q[0][i]) vv[5].push_back(i); } } int sz[3]; mst(sz,0); rep(i,0,3) sz[i]=vv[i+3].size(); rep(i,0,3) cnt+=vv[i].size(),sz[i]-=vv[i].size(); rep(i,0,3) if(sz[i]<0) sz[i]=0; cnt+=max(sz[0],max(sz[1],sz[2])); pf("%d\n",cnt); } }
|