求助floyd
  • 板块P1119 灾后重建
  • 楼主Mine_KingCattleya
  • 当前回复36
  • 已保存回复36
  • 发布时间2020/7/14 10:08
  • 上次更新2023/11/6 23:10:00
查看原帖
求助floyd
195331
Mine_KingCattleya楼主2020/7/14 10:08

Rt.感觉思路和题解一模一样啊,为什么样例都过不了?

#include<bits/stdc++.h>
using namespace std;
int n,m,Q,p[205]/*,u[19905],v[19905],w[19905]*/;
int now=1,dp[205][205];
int main()
{
	memset(dp,-1,sizeof(dp));
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&p[i]),dp[i][i]=0;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		u++,v++;
		dp[u][v]=dp[v][u]=w;
	}
	scanf("%d",&Q);
	while(Q--)
	{
		int x,y,t;
		scanf("%d%d%d",&x,&y,&t);
		x++,y++;
		while(now<=n&&p[now]<=t)
		{
			for(int i=1;i<=n;i++)
				for(int j=1;j<=n;j++)
					if(dp[i][j]==-1||dp[i][j]<dp[i][now]+dp[now][j]) dp[i][j]=dp[i][now]+dp[now][j];
			now++;
		}
		if(p[x]<=t&&p[y]<=t) printf("%d\n",dp[x][y]);
		else printf("-1\n");
	}
	return 0;
}
2020/7/14 10:08
加载中...