样例过了,但全部WA,有大佬能看出我是在哪里出了问题吗
  • 板块灌水区
  • 楼主Lycdeer
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/25 23:17
  • 上次更新2024/8/26 10:31:10
查看原帖
样例过了,但全部WA,有大佬能看出我是在哪里出了问题吗
1088782
Lycdeer楼主2024/8/25 23:17
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
const int M=5e4+5;
const long long INF=1e15;
int n,m,b_v;
pair<long long,int> pr;
long long f[N];
int h[N],nxt[M],to[M],cnt;
long long val[M],dis[M];
bool vis[N];
struct node{
	long long val;
	int num;
}p[N];
bool cmp(node a,node b){
	return a.val<b.val;
}
void add(int x,int y,int z){
	to[++cnt]=y;
	val[cnt]=z;
	nxt[cnt]=h[x];
	h[x]++;
}
priority_queue<pair<long long,int> > q;
bool Dijkstra(long long tp){
	fill(dis+1,dis+n+1,INF);
	fill(vis+1,vis+n+1,0);
	dis[1]=0;
	pr.first=dis[1];
	pr.second=1;
	q.push(pr);
	while(q.size()){
		pr=q.top(); q.pop();
		int u=pr.second;
		vis[u]=1;
		for(int i=h[u];i;i=nxt[i]){
			int v=to[i];
			long long w=val[i];
			if(vis[v]) continue;
			if(f[v]>tp) continue;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				pr.first=dis[v];
				pr.second=v;
				q.push(pr);
			}
		}
	}
	long long sum=0;
	for(int i=2;i<=n-1;i++){
		sum+=dis[i];
		if(sum>b_v) return 0;
	}
	return 1;
}
int main(){
	cin>>n>>m>>b_v;
	for(int i=1;i<=n;i++){
		cin>>f[i];
		p[i].val=f[i];
		p[i].num=i;
	}
	sort(p+1,p+n+1,cmp);
	for(int i=1,a,b,c;i<=m;i++){
		cin>>a>>b>>c;
		add(a,b,c); add(b,a,c);
	}
	int l=2,r=n-1;
	while(l<=r){
		int mid=(l+r)/2;
		if(Dijkstra(p[mid].val)) r=mid-1;
		else l=mid+1;
	}
	cout<<f[l];
	return 0;
}
2024/8/25 23:17
加载中...