diff --git a/src/11/5/P3953.cpp b/src/11/5/P3953.cpp new file mode 100644 index 0000000..cb669d2 --- /dev/null +++ b/src/11/5/P3953.cpp @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include +#include +#include +using ll = int64_t; +#define sl static inline +// #define printf +const ll maxm=2e5+5; +ll n,m,k,p,nt; +struct E{ + ll v,w; +}; +struct P{ + ll now,step; + inline bool operator<(const P&o)const{ + return step>o.step; + } +}; +std::vector> edg; +std::bitset vis; +std::deque

dq; + +sl ll dj(){ + vis.reset(); + std::priority_queue

pq; + pq.emplace(1,0); + while(pq.size()){ + auto[now,step]=pq.top(); + pq.pop(); + if(now==n)return step; + if(vis[now])continue; + vis[now]=true; + for(auto[v,w]:edg[now]){ + pq.emplace(v,step+w); + } + } + return -1; +} + +sl void solve(){ + printf("NT = %lld\n",++nt); + std::cin>>n>>m>>k>>p; + edg.clear(); + edg.resize(n+1); + for(ll i=1;i<=m;i++){ + ll u,v,w; + std::cin>>u>>v>>w; + edg[u].emplace_back(v,w); + } + const ll d = dj(); + printf("found d=%lld\n",d); + if(d==-1){ + std::cout<<"0\n"; + return; + } + const ll ms=d+k; + ll ans=0; + dq.clear(); + dq.emplace_back(1,0); + ll tick=0; + while(dq.size()){ + tick++; + if(tick>1e6){ + std::cout<<-1<<"\n"; + return; + } + auto[now,step]=dq.front(); + dq.pop_front(); + if(now==n){ + ans++; + } + for(auto[v,w]:edg[now]){ + const ll ns=w+step; + if(ns>ms)continue; + dq.emplace_back(v,ns); + } + } + std::cout<>t; + while(t--){ + solve(); + } +} \ No newline at end of file