在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];}
else
for(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;
}