#include <cstdio> #include <vector> #define MAKS 200010 using namespace std; typedef long long int lld; vector<int> sas[MAKS]; int kolor[MAKS]; lld wyn[MAKS]; int n,a,b; int maksv; bool zle(int v) { if(kolor[v]==1)return true; if(kolor[v]==2)return false; if(v>maksv)maksv=v; kolor[v]=1; if(v!=b) { if(sas[v].size()==0)return true; for(int i=0;i<sas[v].size();i++) { if(zle(sas[v][i]))return true; } } kolor[v]=2; return false; } void licz(int A, int B) { a=A; b=B; maksv=0; for(int i=1;i<=n;i++)kolor[i]=0; if(!zle(a)) { for(int k=maksv;k<=n;k++)wyn[k]++; } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { int l; scanf("%d",&l); for(int j=0;j<l;j++) { int x; scanf("%d",&x); //if(x==i)continue; sas[i].push_back(x); } } for(int A=1;A<=n;A++) { for(int B=1;B<=n;B++) { if(A==B)continue; licz(A,B); } } for(int K=1;K<=n;K++)printf("%lld ",wyn[K]); puts(""); }
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <cstdio> #include <vector> #define MAKS 200010 using namespace std; typedef long long int lld; vector<int> sas[MAKS]; int kolor[MAKS]; lld wyn[MAKS]; int n,a,b; int maksv; bool zle(int v) { if(kolor[v]==1)return true; if(kolor[v]==2)return false; if(v>maksv)maksv=v; kolor[v]=1; if(v!=b) { if(sas[v].size()==0)return true; for(int i=0;i<sas[v].size();i++) { if(zle(sas[v][i]))return true; } } kolor[v]=2; return false; } void licz(int A, int B) { a=A; b=B; maksv=0; for(int i=1;i<=n;i++)kolor[i]=0; if(!zle(a)) { for(int k=maksv;k<=n;k++)wyn[k]++; } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { int l; scanf("%d",&l); for(int j=0;j<l;j++) { int x; scanf("%d",&x); //if(x==i)continue; sas[i].push_back(x); } } for(int A=1;A<=n;A++) { for(int B=1;B<=n;B++) { if(A==B)continue; licz(A,B); } } for(int K=1;K<=n;K++)printf("%lld ",wyn[K]); puts(""); } |