#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define MAX_N 500005
#ifndef DEB_VAL
#define DEB_VAL 0
#endif
#define DEB if(debug)
#define MP make_pair
#define PB push_back
#define FT first
#define SD second
int debug = DEB_VAL;
int k,n1,ni,x;
vector<int> graf[MAX_N];
int wyn[MAX_N][2];
int res, akt;
int alt;
int main() {
scanf("%d %d", &k, &n1);
for(int i=0;i<n1;i++) {
graf[1].PB(0);
}
for(int i=2;i<=k;i++){
scanf("%d", &ni);
for(int j=0;j<ni;j++) {
scanf("%d", &x);
graf[i].PB(x);
}
}
for(int j=1;j<=graf[k].size();j++) {
wyn[j][alt^1]=1;
}
//debug
//printf("TAB0\n");
//for(int j=0;j<=graf[k].size();j++) {
// printf("%d ", wyn[j][alt^1]);
//}
//printf("\n");
/////
for(int i=k;i>0;i--) {
//printf("alt: %d %d\n", alt, alt^1);
for(int j=0;j<graf[i].size();j++) {
if(wyn[j+1][alt^1]==0) wyn[j+1][alt^1]=1;
}
akt=0;
for(int j=1;j<=graf[i].size();j++) {
akt+=wyn[j][alt^1];
}
if(akt>res) res=akt;
//debug
//printf("TAB0\n");
//for(int j=0;j<=graf[i].size();j++) {
// printf("%d ", wyn[j][alt^1]);
//}
//printf("\n");
/////
for(int j=0;j<graf[i].size();j++) {
//if(wyn[j][alt^1]==0) wyn[j][alt^1]=1;
//printf("Dodaję do %d, wartosc %d\n", graf[i][j], wyn[j+1][alt^1]);
wyn[graf[i][j]][alt]+=wyn[j+1][alt^1];
wyn[j+1][alt^1]=0;
}
wyn[0][alt^1]=0;
//debug
//printf("TAB x %d dlugosc: %d\n",i, (int)graf[i-1].size());
//for(int j=0;j<=graf[i-1].size();j++) {
// printf("%d ", wyn[j][alt]);
//}
//printf("\n");
/////
alt^=1;
}
printf("%d\n",res);
return 0;
}
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include<cstdio> #include<algorithm> #include<vector> using namespace std; #define MAX_N 500005 #ifndef DEB_VAL #define DEB_VAL 0 #endif #define DEB if(debug) #define MP make_pair #define PB push_back #define FT first #define SD second int debug = DEB_VAL; int k,n1,ni,x; vector<int> graf[MAX_N]; int wyn[MAX_N][2]; int res, akt; int alt; int main() { scanf("%d %d", &k, &n1); for(int i=0;i<n1;i++) { graf[1].PB(0); } for(int i=2;i<=k;i++){ scanf("%d", &ni); for(int j=0;j<ni;j++) { scanf("%d", &x); graf[i].PB(x); } } for(int j=1;j<=graf[k].size();j++) { wyn[j][alt^1]=1; } //debug //printf("TAB0\n"); //for(int j=0;j<=graf[k].size();j++) { // printf("%d ", wyn[j][alt^1]); //} //printf("\n"); ///// for(int i=k;i>0;i--) { //printf("alt: %d %d\n", alt, alt^1); for(int j=0;j<graf[i].size();j++) { if(wyn[j+1][alt^1]==0) wyn[j+1][alt^1]=1; } akt=0; for(int j=1;j<=graf[i].size();j++) { akt+=wyn[j][alt^1]; } if(akt>res) res=akt; //debug //printf("TAB0\n"); //for(int j=0;j<=graf[i].size();j++) { // printf("%d ", wyn[j][alt^1]); //} //printf("\n"); ///// for(int j=0;j<graf[i].size();j++) { //if(wyn[j][alt^1]==0) wyn[j][alt^1]=1; //printf("Dodaję do %d, wartosc %d\n", graf[i][j], wyn[j+1][alt^1]); wyn[graf[i][j]][alt]+=wyn[j+1][alt^1]; wyn[j+1][alt^1]=0; } wyn[0][alt^1]=0; //debug //printf("TAB x %d dlugosc: %d\n",i, (int)graf[i-1].size()); //for(int j=0;j<=graf[i-1].size();j++) { // printf("%d ", wyn[j][alt]); //} //printf("\n"); ///// alt^=1; } printf("%d\n",res); return 0; } |
English