在1-n,1-m里选n+m-1个边,不形成环的话那就可以补全图形。。。还是不懂
#include<iostream>
#include<cstring>
using namespace std;
const int N=6000;
typedef long long ll;
int l[N],r[N],A[N*N];
int ma[N][N],dis[N+N];
int n,m,a,b,c,d,p;
bool st[N+N];void ini()
{cin>>n>>m>>a>>b>>c>>d>>p;A[0]=a;for(int i=1;i<=n*m;i++)A[i]=(1ll*A[i-1]*A[i-1]*b+1ll*A[i-1]*c+d)%p,ma[(i-1)/m+1][(i-1)%m+1]=A[i];memset(dis,0x3f,sizeof dis);dis[1]=0;int ans=0;while(1){int d=-1;for(int i=1;i<=n+m;i++)if(!st[i]&&(d==-1||dis[d]>dis[i]))d=i;if(d==-1)break;ans+=dis[d];st[d]=1;if(d<=n){for(int i=1;i<=m;i++)if(dis[i+n]>ma[d][i])dis[i+n]=ma[d][i];}elsefor(int i=1;i<=n;i++)if(dis[i]>ma[i][d-n])dis[i]=ma[i][d-n];;}printf("%d\n",ans);return ;
}int main()
{ini();return 0;
}