蒻得不行 @ 2019-01-29 19:25:19
老师给我们介绍了一个蜜汁思路
70分求解
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int a[1001],p[1001],n,m,s,x,y,i,j,maxx,minn;
//a为离线做法的输入表\
p为模拟时各车站的等级
int main(){
//freopen(".txt","r",stdin);
scanf("%d%d",&n,&m);
while(m--){
maxx=0;minn=1<<30;
scanf("%d",&s);
for(i=0;i<s;i++){
scanf("%d",&a[i]);
maxx=max(maxx,p[a[i]]);//临时停靠站的最大值
}
for(i=1;i<s;i++) for(j=a[i-1]+1;j<a[i];j++)
minn=min(minn,p[j]);//非临时停靠站的最小值
maxx-=minn-1;//因为非临时停靠站等级必须大于零时停靠站,所以-1
if(maxx<=0) continue;//临时停靠站与非临时停靠站相差一或更大,不矛盾,跳出
for(i=1;i<s;i++) for(j=a[i-1]+1;j<a[i];j++)
p[j]+=maxx;//将所有非临时停靠站的等级置于临时停靠站的等级之上
}
maxx=0;minn=1<<30;
for(i=1;i<=n;i++){
maxx=max(maxx,p[i]);
minn=min(minn,p[i]);
}
printf("%d",maxx+1);//因为等级下标为0,所以+1
return 0;
}
by 蒻得不行 @ 2019-01-29 19:33:17
没错这是模拟