萌新P2176求助!
  • 板块灌水区
  • 楼主Collapsarr
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/4/16 21:20
  • 上次更新2023/10/23 18:14:21
查看原帖
萌新P2176求助!
716122
Collapsarr楼主2023/4/16 21:20

me的代码(某而思teacher教的):

#include<bits/stdc++.h>
using namespace std;

int n,m,v[110][110],dis[110],t,pre[110];
bool falg[110];

void dj()
{
	for(int i = 1;i<n;i++)
    {
        for(int j = 1;j<=n;j++)
        {
            if(v[t][j]>0&&dis[t]+v[t][j]<dis[j])
            {
        		dis[j] = dis[t] + v[t][j];
        		pre[j] = t;
            }
        }
        int x = 1e10;
        for(int j = 1;j<=n;j++)
        {
            if(dis[j]<x&&!falg[j])
            {
           		x = dis[j];
           		t = j;
            }
        }
        falg[t] = 1;
    }
}

int main()
{
	int ans1 = 0,ans2 = 0;
	scanf("%d %d",&n,&m);
	for(int i = 1;i<=m;i++)
	{
		int x,y,z;
		scanf("%d %d %d",&x,&y,&z);
		v[x][y] = z;
		v[y][x] = z;
	}
	memset(dis,0x3f3f3f3f,sizeof(dis));
	t = 1;
	falg[1] = 1;
	pre[1] = 0;
	dis[1] = 0;
	dj();
	ans1 = dis[n];
	int x = n;
	while(pre[x]!=0)
	{
		v[x][pre[x]] *= 2;
        v[pre[x]][x] *= 2;
        memset(dis,0x3f3f3f3f,sizeof(dis));
        memset(falg,0,sizeof(falg));
        t = 1;
        falg[1] = 1;
        dis[1] = 0;
        dj();
        ans2 = max(ans2,dis[n]);
        v[x][pre[x]] /= 2;
        v[pre[x]][x] /= 2;
        x = pre[x];
	}
	printf("%d\n",ans2-ans1);
}
2023/4/16 21:20
加载中...