#include<bits/stdc++.h>
#define maxn 99999999
const long long inf = 0x3737373737373737;
using namespace std;
long long x[1111111],y[1111111],z[1111111];
long long mp[1111][1111];
int sa[1111111];
long long dis[1111];
bool vis[1111];
void dijk(int n) {
memset(vis,0,sizeof vis);
memset(dis,inf,sizeof dis);
vis[0]=1;
for(int i=1;i<n;i++)
dis[i]=mp[0][i];
long long minx;
int k;
for(int i=0;i<=n-1;i++) {
minx=maxn;
k=-1;
for(int j=0;j<=n-1;j++) {
if(vis[j]==0) {
if(dis[j]<minx) {
minx=dis[j];
k=j;
}
}
}
if(k==-1) return;
vis[k]=1;
for(int j=0;j<=n-1;j++) {
if(!vis[j]) dis[j]=min(dis[j],dis[k]+mp[k][j]);
}
}
}
int main()
{
int n;
int m;
while(scanf("%d%d%lld%lld%lld%lld",&n,&m,&x[0],&x[1],&y[0],&y[1])!=EOF) {
for(int i=2;i<=1000005;i++) {
x[i]=(12345+x[i-1]*23456%5837501+x[i-2]*34567%5837501+x[i-1]*x[i-2]%5837501*45678)%5837501;
y[i]=(56789+y[i-1]*67890%9860381+y[i-2]*78901%9860381+y[i-1]*y[i-2]%9860381*89012)%9860381;
}
for(int i=0;i<=1000005;i++) {
z[i]=(x[i]*90123+y[i])%8475871+1;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(i==j) mp[i][j]=0;
else mp[i][j]=z[i*n+j];
/* for(int i=0;i<n;i++) {
for(int j=0;j<n;j++)
cout << mp[i][j] << " ";
cout << endl;
}*/
dijk(n);
memset(sa,0,sizeof sa);
// for(int i=0;i<n;i++)
// cout << dis[i] << " ";
for(int i=1;i<=n-1;i++) {
sa[dis[i]%m]++;
}
for(int i=0;i<m;i++) {
if(sa[i]) {
cout << i << endl;
break;
}
}
}
return 0;
}
HDU4849-Wow! Such City!-dijkstra
最新推荐文章于 2020-12-29 07:06:13 发布