全RE求调
  • 板块学术版
  • 楼主c_y_y
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/29 20:36
  • 上次更新2023/11/2 10:47:28
查看原帖
全RE求调
777965
c_y_y楼主2023/10/29 20:36

CSPJT4

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10,K=110;
inline int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
	return x*f;
}
struct node{
	int x,k;
};
int n,m,k,dis[N][K];
vector<int> G[N],e[N];
bool check(int x){
	memset(dis,-1,sizeof(dis));
	dis[n][0]=x*k;
	queue<node>q;
	q.push(node{n,0});
	while(q.size()){
		int u=q.front().x,b=q.front().k;
		q.pop();
		if(dis[u][b]==0) continue;
		for(int i=0;i<G[u].size();i++){
			if(e[x][i]>=dis[x][b]) continue;
			int v=G[u][i],p=(b+k-1)%k;
			if(dis[v][p]!=-1) continue;
			dis[v][p]=dis[u][b]-1;
			q.push(node{v,p});
		}
	}
	if(dis[1][0]==-1) return false;
	return true;
}
int main(){
	ios::sync_with_stdio(false),cout.tie(0);
	n=read(),m=read(),k=read();
	while(m--){
		int u=read(),v=read(),w=read();
		G[v].push_back(u);
		e[v].push_back(w);
	}
	int l=0,r=2e6,ans=-1;
	while(l<=r){
		int mid=l+r>>1;
		if(check(mid)) ans=mid,r=mid-1;
		else l=mid+1;
	}
	cout<<ans*k;
	return 0;
}

2023/10/29 20:36
加载中...