tgs9311 @ 2020-08-10 20:47:58
#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace FAST_IO
{
template<typename T> void read(T &a)
{
a=0;
int f=1;
char c=getchar();
while(!isdigit(c))
{
if(c=='-')
{
f=-1;
}
c=getchar();
}
while(isdigit(c))
{
a=a*10+c-'0';
c=getchar();
}
a=a*f;
}
template <typename T> void write(T a)
{
if(a<0)
{
a=-a;
putchar('-');
}
if(a>9)
{
write(a/10);
}
putchar(a%10+'0');
}
template <typename T> void writeln(T a)
{
write(a);
puts("");
}
}
int n,m,b;
int price[10001];
vector<pair<int,int> > g[50001];
int vis[10001];
void dfs(int mi,int now,int nowbl)
{
for(int i=0;i<g[now].size();i++)
{
//cout<<now<<" "<<vis[g[now][i].first]<<" "<<price[vis[g[now][i].first]]<<" "<<nowbl-g[now][i].second<<endl;
if(!vis[g[now][i].first]&&price[g[now][i].first]<=mi&&nowbl-g[now][i].second>=0)
{
//cout<<now<<" "<<g[now][i].first<<endl;
vis[g[now][i].first]=true;
dfs(mi,g[now][i].first,nowbl-g[now][i].second);
}
}
}
bool check(int mi)
{
if(price[1]>mi)
{
return false;
}
for(int i=1;i<=n;i++)
{
vis[i]=false;
}
vis[1]=true;
dfs(mi,1,b);
return vis[n];
}
signed main()
{
cin>>n>>m>>b;
for(int i=1;i<=n;i++)
{
cin>>price[i];
}
for(int i=1;i<=m;i++)
{
int from,to,blood;
cin>>from>>to>>blood;
g[from].push_back(make_pair(to,blood));
g[to].push_back(make_pair(from,blood));
}
//cout<<check(0);
//system("pause");
int l=0,r=INT_MAX,mid,ans=-1;
while(l<=r)
{
mid=l+r>>1;
//cout<<l<<" "<<r<<" "<<mid<<endl;
if(check(mid))
{
ans=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
if(ans==-1)
{
cout<<"AFK";
}
else
{
cout<<ans;
}
}
64分求助
by michael_song @ 2020-08-10 20:56:04
这道题不是一道二分最短路吗
用dfs求最短路会出很多奇奇怪怪的问题
by tgs9311 @ 2020-08-10 21:02:57
@michael_song 不用最短路吧,判断路径存在性就行了
by tgs9311 @ 2020-08-10 21:17:36
最短路过了但是我还是想知道这个dfs哪错了(
by AT·小苏苏 @ 2020-08-10 21:17:54
@tgs9311 我以前也有这种情况,判能不能到,用的dfs,但是dfs就会给你走一条长一些的道路,导致本来能到的点判断为走不到,如果是纯暴搜时间复杂度又不如最短路
你是wa,应该是被dfs坑了
最好用最短路,真的
by tgs9311 @ 2020-08-10 21:21:04
@AT·小苏苏 我看题解有人用dfs过了但是用的邻接表,而且我老师给我发的三种做法里面就有一种是二分+dfs但是他没给我标程
by AT·小苏苏 @ 2020-08-11 07:57:26
@tgs9311
那我学疏才浅,看不出来dfs出了什么锅
但是你这dfs的核心思想依然是Dijkstra的啊
还不如干脆用dijkstra
by AT·小苏苏 @ 2020-08-11 08:00:20
反正我的经验之谈是能用最短路千万别用dfs,会不明不白的WA