萌 新 求 助 六个点RE
查看原帖
萌 新 求 助 六个点RE
91956
Dreamweaver楼主2021/6/29 20:10
#include<bits/stdc++.h>
using namespace std;
#define mod 998244353
#define inf 0x3f3f3f3f
#define re register
#define maxn 70010
#define int long long
#define Orz cout<<"stO %王队% Orz"<<'\n';
int n,p,k;
struct node
{
	int s,t,v,next;
}edge[maxn],edge1[maxn];
int cnt;
int head[maxn],head1[maxn];
void add(int s,int t,int v)
{
	edge[++cnt].s=s;
	edge[cnt].t=t;
	edge[cnt].v=v;
	edge[cnt].next=head[s];
	head[s]=cnt;
}
int cnt1;
void add1(int s,int t,int v)
{
	edge1[++cnt1].s=s;
	edge1[cnt1].t=t;
	edge1[cnt1].v=v;
	edge1[cnt1].next=head1[s];
	head1[s]=cnt1;
}
queue<int>Q;
bool v[maxn];
int dis[maxn];
void SPFA()
{
	memset(dis,0x3f,sizeof dis);
	memset(v,0,sizeof v);
	v[1]=1;
	dis[1]=0;
	Q.push(1);
	while(Q.size())
	{
		int u=Q.front();
		Q.pop();
		v[u]=0;
		for(re int i=head1[u];i;i=edge1[i].next)
		{
			int tt=edge1[i].t;
			int cc=edge1[i].v;
			if(dis[tt]>dis[u]+cc)
			{
				dis[tt]=dis[u]+cc;
				if(!v[tt])
					v[tt]=true,Q.push(tt);
			}
		}
	}
}
bool P(int x)
{
	memset(head1,0,sizeof head1);
	int cnt1=0;
	for(re int i=1;i<=p;++i)
	{
		add1(edge[i].s,edge[i].t,edge[i].v>x?1:0);
		add1(edge[i].t,edge[i].s,edge[i].v>x?1:0);
	}
	SPFA();
	if(dis[n]>k)	return false;
	return true;
}
inline int read(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9') {if(ch=='-')f=-1; ch=getchar();}
    while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}
    return x*f;
}
signed main()
{
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
//	printf("%dM\n",(sizeof(dp) >> 20));
	cin>>n>>p>>k;
	for(re int i=1;i<=p;++i)
	{
		edge[i].s=read(),edge[i].t=read(),edge[i].v=read();
	}
	int l=1,r=1000100,mid=0;
	int ans=-1;
	while(l<=r)
	{
		//cout<<dis[n]<<endl;
		mid=l+r>>1;
		if(P(mid))
			ans=mid,r=mid-1;
		else
			l=mid+1;
	}
	cout<<ans;
	return 0;
}

2021/6/29 20:10
加载中...