#include <cstdio>
#include <vector>
using namespace std;
int n,k,x,y;//,minimum = 0;
vector< int > day[500005];
vector< int > ile[500005];
void show(){
for(int i=0; i<k; i++){
for(int j=0; j<day[i].size(); j++)
printf("%d ",day[i][j]);
printf("\n");
}
return;
}
void licz(){
for(int j=1; j<=ile[k-1][0]; j++)
ile[k-1][j] = 1;
for(int i=k-1; i>0; i--){
for(int j=1; j<=day[i][0]; j++){
if(ile[i][j] == 0)
ile[i][j]++;
if(day[i][j] > 0)
ile[i-1][ day[i][j] ] += ile[i][j];
}
}
for(int j=1; j<=ile[0][0]; j++)
if(ile[0][j] == 0)
ile[0][j]++;
return;
}
int sprawdzIle(){
int maxIle = 0;
for(int i=0; i<k; i++){
int tempIle = 0;
for(int j=1; j<=ile[i][0]; j++){
tempIle += ile[i][j];
}
if(tempIle > maxIle)
maxIle = tempIle;
}
return maxIle;
}
void showIle(){
for(int i=0; i<k; i++){
for(int j=0; j<ile[i].size(); j++)
printf("%d ",ile[i][j]);
printf("\n");
}
return;
}
int main(){
scanf("%d %d",&k,&n);
for(int i=0; i<=n; i++){
day[0].push_back(0);
ile[0].push_back(0);
}
day[0][0] = n;
ile[0][0] = n;
for(int i=1; i<=k; i++){
scanf("%d",&x);
day[i].push_back(x);
ile[i].push_back(x);
for(int j=1; j<=x; j++){
scanf("%d",&y);
day[i].push_back(y);
ile[i].push_back(0);
}
}
//show();
licz();
//showIle();
//minimum = sprawdzIle();
printf("%d\n",sprawdzIle());
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 | #include <cstdio> #include <vector> using namespace std; int n,k,x,y;//,minimum = 0; vector< int > day[500005]; vector< int > ile[500005]; void show(){ for(int i=0; i<k; i++){ for(int j=0; j<day[i].size(); j++) printf("%d ",day[i][j]); printf("\n"); } return; } void licz(){ for(int j=1; j<=ile[k-1][0]; j++) ile[k-1][j] = 1; for(int i=k-1; i>0; i--){ for(int j=1; j<=day[i][0]; j++){ if(ile[i][j] == 0) ile[i][j]++; if(day[i][j] > 0) ile[i-1][ day[i][j] ] += ile[i][j]; } } for(int j=1; j<=ile[0][0]; j++) if(ile[0][j] == 0) ile[0][j]++; return; } int sprawdzIle(){ int maxIle = 0; for(int i=0; i<k; i++){ int tempIle = 0; for(int j=1; j<=ile[i][0]; j++){ tempIle += ile[i][j]; } if(tempIle > maxIle) maxIle = tempIle; } return maxIle; } void showIle(){ for(int i=0; i<k; i++){ for(int j=0; j<ile[i].size(); j++) printf("%d ",ile[i][j]); printf("\n"); } return; } int main(){ scanf("%d %d",&k,&n); for(int i=0; i<=n; i++){ day[0].push_back(0); ile[0].push_back(0); } day[0][0] = n; ile[0][0] = n; for(int i=1; i<=k; i++){ scanf("%d",&x); day[i].push_back(x); ile[i].push_back(x); for(int j=1; j<=x; j++){ scanf("%d",&y); day[i].push_back(y); ile[i].push_back(0); } } //show(); licz(); //showIle(); //minimum = sprawdzIle(); printf("%d\n",sprawdzIle()); return 0; } |
English