#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(""); } |
English