思路:题目是一个最大流问题,但最多有5000×5000个节点,最大流会爆炸。可以转化为最短路问题,和bzoj 1001这题类似。
但是即使转化为最短路问题,2500万个节点仍然无法解决【SPFA 50分,DIJKSTRA 60分】。
暂时没有更好的想法。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std;
#define N 5010
int n,m;
int a[N][N],b[N][N];
int read(){
int A,B,Q,XI;
scanf("%d%d%d%d%d%d",&n,&m,&A,&B,&Q,&XI);
//a
for (int i=1;i<n;i++)
for (int j=1;j<=m;j++){
XI=(1ll*A*XI+B)%Q;
a[i][j]=XI;
}
//b
for (int i=2;i<=n-1;i++)
for (int j=1;j<m;j++){
XI=(1ll*A*XI+B)%Q;
b[i][j]=XI;
}
return 0;
}
int ed;
int ed_x[N],ed_y[N];
int ed_w[N];
int getEdge(int x,int y){ //从(x,y)出发点连边
ed=0;
if (x==0){ //起始或终点