RT,第一次我按照倒序枚举建边是这样的。
for(i=1;i<=n;i++){
get(0,i,0,2e9),get(i+n,T,0,2e9),get(i,i+n,1,1),get(i+2*n,i,0,2e9),get(i+3*n,i,0,2e9);
for(j=i-1;j;j--) if(a[i]%7==a[j]%7){get(j+n,i+2*n,0,2e9),get(j+2*n,i+2*n,0,2e9);break;}
for(j=i-1;j;j--) if(a[j]==a[i]-1){ get(j+n,i+3*n,0,2e9);break;}
for(j=i-1;j;j--) if(a[i]==a[j]-1) {get(j+n,i+3*n,0,2e9);break;}
for(j=i-1;j;j--) if(a[i]==a[j]){ get(j+3*n,i+3*n,0,2e9);break;}
}
然后在第32个点错掉了。答案是1188输出1187
于是我去看了一下题解,改成正序枚举
for(i=1;i<=n;i++){
get(0,i,0,2e9),get(i+n,T,0,2e9),get(i,i+n,1,1),get(i+2*n,i,0,2e9),get(i+3*n,i,0,2e9);
for(j=i+1;j<=n;j++) if(a[i]%7==a[j]%7){get(i+n,j+2*n,0,2e9),get(i+2*n,j+2*n,0,2e9);break;}
for(j=i+1;j<=n;j++) if(a[j]==a[i]-1){ get(i+n,j+3*n,0,2e9);break;}
for(j=i+1;j<=n;j++) if(a[j]==a[i]+1) {get(i+n,j+3*n,0,2e9);break;}
for(j=i+1;j<=n;j++) if(a[i]==a[j]){ get(i+3*n,j+3*n,0,2e9);break;}
}
就对了,有没有大佬帮帮萌新解答一下呀qwq