提交时间:2022-07-19 12:05:42
运行 ID: 52391
#include <bits/stdc++.h> using namespace std; inline bool cmp(vector<int>a, vector<int>b) { return a.size()<b.size(); } template<typename T>inline void Read(T &x) { char ch=getchar(); x=0; while(!isdigit(ch)) ch=getchar(); while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar(); } const int maxn=8010,maxm=4010; int n,m,s; namespace st { int d[10],ed[10],k[10],lt[10][10]; int vis[10]; bool dfs(int x) { if(x==s) return 1; } void solve() { int k[maxm]= {0}; vector<int>ed[maxm]; for(int i=1; i<=m; i++) ed[i].clear(); bool vis[maxn]= {0}; for(int i=1; i<=m; i++) { Read(k[i]); for(int j=1,x; j<=k[i]; j++) Read(x),ed[i].push_back(x); } sort(ed+1,ed+m+1,cmp); int ans=0,flag=1; for(int i=1; i<=m; i++) { for(int j=0; j<k[i]; j++) if(vis[ed[i][j]]) flag=0; if(flag) { for(int j=0; j<ed[i].size(); j++) vis[ed[i][j]]=1; ans++; } flag=1; } cout<<ans<<endl; } } int main() { cout.tie(0); Read(n),Read(m); if(n<=15 && m<=8) st::solve(); else { int k[maxm]= {0},visp[maxn]; vector<int>ed[maxm]; for(int i=1; i<=m; i++) ed[i].clear(); bool vis[maxn]= {0}; bool flag3=1; for(int i=1; i<=m; i++) { Read(k[i]); if(k[i]!=2) flag3=0; for(int j=1,x; j<=k[i]; j++) Read(x),ed[i].push_back(x); } if(flag3) { bool Flag=1; for(int i=1; i<=m; i++) { for(int j=1; j<=ed[i].size(); j++) if(vis[ed[i][j]]) Flag=0; if(Flag==1) for(int j=1; j<=ed[i].size(); j++) vis[ed[i][j]]=1; } } sort(ed+1,ed+m+1,cmp); int ans=0,flag=1; for(int i=1; i<=m; i++) { for(int j=0; j<k[i]; j++) if(vis[ed[i][j]]) flag=0; if(flag) { for(int j=0; j<ed[i].size(); j++) vis[ed[i][j]]=1; ans++; } flag=1; } cout<<ans<<endl; } return 0; }