这一题,我第五个测试点明明是对的,它却说我错??
https://www.luogu.com.cn/record/104384369
第五个测试点: 10 20
100 89 100 72 39 50 74 50 50 1
1 2 1
1 3 1
1 4 1
2 5 1
1 5 1
3 5 1
2 3 1
2 4 1
3 4 1
4 5 1
1 6 1
6 7 1
1 8 1
6 9 1
9 10 1
1 7 1
6 8 1
8 9 1
1 10 1
7 8 1
我的输出:24
正确输出:24
代码:
#include<bits/stdc++.h>
using namespace std;
int minn[1000001],n,m,maxn[1000001],a[1000001],sum;
vector<int>adj[1000001];
vector<int>adjj[1000001];
void spfa(int s)
{
queue<int> q;
memset(minn,127,sizeof(minn));
minn[s]=a[s];
q.push(s);
bool flag[1000001];
flag[s]=1;
while(!q.empty())
{
int tt=q.front();
q.pop();
flag[tt]=0;
for(int i=0;i<adj[tt].size();i++)
{
int ttt=adj[tt][i];
if(minn[ttt]>min(minn[tt],a[ttt]))
{
minn[ttt]=min(minn[tt],a[ttt]);
if(!flag[ttt])
{
q.push(ttt);
flag[ttt]=1;
}
}
}
}
}
void sfa11(int a1)
{
maxn[a1]=a[a1];
queue<int> q;
q.push(a1);
bool flag[1000001];
flag[a1]=1;
while(!q.empty())
{
int tt=q.front();
q.pop();
flag[tt]=0;
for(int i=0;i<adjj[tt].size();i++)
{
int ttt=adjj[tt][i];
if(maxn[ttt]<max(maxn[tt],a[ttt]))
{
maxn[ttt]=max(maxn[tt],a[ttt]);
if(!flag[ttt])
{
q.push(ttt);
flag[ttt]=1;
}
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
if(z==1)
{
adj[x].push_back(y);
adjj[y].push_back(x);
}
else
{
adj[x].push_back(y);
adj[y].push_back(x);
adjj[x].push_back(y);
adjj[y].push_back(x);
}
}
spfa(1);
sfa11(n);
for(int i=1;i<=n;i++)
{
sum=max(sum,maxn[i]-minn[i]);
}
cout<<sum;
return 0;
}