萌新求助关于建边顺序
查看原帖
萌新求助关于建边顺序
181766
275307894a楼主2021/6/1 19:53

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;}
	}

然后在第3232个点错掉了。答案是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

2021/6/1 19:53
加载中...