社区讨论
普及T4正确性求助
灌水区参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lo76kz9c
- 此快照首次捕获于
- 2023/10/26 20:49 2 年前
- 此快照最后确认于
- 2023/11/02 11:17 2 年前
代码复杂度好像是 ,解法是二分+,赛时大样例没过,但洛谷云斗都能过,某平台挂了一个点,无法查看数据,不知道哪里锅了
CPP#include<bits/stdc++.h>
#define ll long long
#define F(i,j,n) for(int i=j;i<=n;i++)
using namespace std;
const int N=1e5+10;
ll n,m,k=1e5,l,r,x,y,u,v,w,T,id,t,cnt,ans=1e18;
ll mx=0,mn=1e18;
ll head[N];
struct Node{
ll nxt,to,dis;
}tr[N];
void add(ll u,ll v,ll w){
t++;
tr[t].to=v;
tr[t].dis=w;
tr[t].nxt=head[u];
head[u]=t;
}
struct node{
ll id,tim;
};
ll vis[N][105];
ll bfs(ll x){
F(i,1,n) F(j,0,k-1) vis[i][j]=0;
queue<node> q;
q.push({1,x});
while(!q.empty()){
node p=q.front();
q.pop();
if(vis[p.id][p.tim%k]) continue ;
vis[p.id][p.tim%k]=1;
if(p.id==n&&p.tim%k==0) return p.tim;
for(ll i=head[p.id];i;i=tr[i].nxt){
ll v=tr[i].to;
if(p.tim>=tr[i].dis) q.push({v,p.tim+1});
}
}
return -1;
}
int main(){
cin>>n>>m>>k;
F(i,1,m) cin>>u>>v>>w,add(u,v,w);
l=0,r=1000000;
while(l<=r){
ll mid=(l+r)/2;
ll id=bfs(mid*k);
if(id!=-1) ans=min(ans,id),r=mid-1;
else l=mid+1;
}
if(ans==1e18) cout<<-1;
else cout<<ans;
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...