思路:变异的dij 在松弛的地方要改一下,即当前点i的最大负载为min(dist[k], map[k][i]);这样就能保定
负载是这条线路上最小的;
//320K
16MS
#include <stdio.h>
#include <string.h>
#define M 205
#define MAX 10005
const int inf = 10001;
char name[M][35];
int map[M][M];
int count,n,src,des;
int min (int a,int b)
{
> b?b:a;
}
int find (char *p)
{
i < count; i ++)
if (strcmp(p,name[i]) == 0)
return i;
(name[count++],p);
- 1;
}
void dij
()
//很纯粹的dij算法 只是把 dist[i] < dist[k]+map[k][i]改为
{
//dist[i] = min(dist[k],map[k][i])
dist[M],vis[M];
i,j,k,maxflow;
(dist,0,sizeof(dist));
(vis,0,sizeof(vis));
< n;i ++)
dist[i] = map[src][i];
inf;
1;
--)
int max = 0;
for (i = 0;i < n;i ++)
if (!vis[i]&&dist[i]
> max)
{
k = i;
max = dist[i];
}
vis[k] = 1;
for (i = 0;i < n;i ++)
if
(map[k][i]&&!vis[i]&&dist[i]
< min (max,map[k][i]))
dist[i] = min (max,map[k][i]);
tons\n\n",dist[des]);
}
int main ()
{
m,i,j,v1,v2,w;
s1[35],s2[35];
1;
("%d%d",&n,&m)&&n&&m)
count = 0;
memset (name,'\0',sizeof(name));