求助 MLE 5pts
查看原帖
求助 MLE 5pts
538609
Neutralized楼主2022/7/27 16:13

只过了 #1。其他的 MLE。

#include <bits/stdc++.h>
using namespace std;

#define ri register int
#define ll long long
#define ull unsigned ll
#define all(x) x.begin(),x.end()
inline void porn(){ ios::sync_with_stdio(0),cout.tie(0),cin.tie(0); }
#define Tp template<class T>
#define g() getchar()
#define pc(x) putchar(x)
#define isd(x) (x>=48&&x<=57)
namespace SlowIO{
    Tp inline void rd(T &x){ x=0; char i=g(); bool f=1; while(!isd(i)) f&=(i!='-'),i=g(); while(isd(i)) x=(x<<3)+(x<<1)+(i^48),i=g(); x*=((f<<1)-1); }
    const int OUT=1e6; static char outp[OUT]; int out;
    Tp inline void op(T x){ out=0; x<0&&(x=-x,pc('-')); if(!x){ pc(48); return; } while(x) outp[++out]=x%10+48,x/=10; while(out) pc(outp[out--]); }
    Tp inline void writeln(T x){ op(x);pc('\n'); }
    Tp inline void writesp(T x){ op(x); pc(' '); }
    Tp inline void write(T x,char c=0){ op(x); c&&pc(c); }
}; using namespace SlowIO;

#define N 400003
const ll oo=1e14;
struct edge{
	int u,v,l; ll w; edge(int U=0,int V=0,int L=0,ll W=0):u(U),v(V),l(L),w(W){}
	inline bool operator <(const edge &a) const{ return w>a.w; }
}; vector<edge> vec,E[N>>1]; bitset<N> vis;
struct node{
	int u; ll dis; node(int U=0,ll DIS=0):u(U),dis(DIS){}
	inline bool operator <(const node &a) const{ return dis>a.dis; }
}; priority_queue<node> q;
int Fa[N],now,Dfn,dfn[N],rig[N],n,m,root;
int head[N],cntr,fa[N][21],val[N]; ll dis[N>>1];
struct Edge{ int to,nxt; }e[N<<1];
inline void Add(int u,int v){ e[++cntr]={v,head[u]},head[u]=cntr; }
#define gfore(u) for(ri i=head[u],v;i;i=e[i].nxt)

inline void Dijkstra(){
	dis[1]=0,q.push(node(1,0));
	while(q.size()){
		int u=q.top().u; q.pop();
		if(vis[u]) continue; vis[u]=1;
		for(edge t:E[u]){
			int v=t.v;
			if(dis[v]>dis[u]+t.w)
				dis[v]=dis[u]+t.w,q.push(node(v,dis[v]));
		}
	}
}

struct Ytz_AKed_himself{
	struct seg{ int lc,rc; ll val; }tr[N<<2]; int tot;
	#define lef(u) tr[u].lc
	#define rig(u) tr[u].rc
	#define Val(u) tr[u].val
	inline void Push(int u){ Val(u)=min(Val(lef(u)),Val(rig(u))); }
	inline void Chg(int &u,int l,int r,int pos,ll x){
		if(!u) u=++tot,lef(u)=rig(u)=Val(u)=0;
		if(l==r){ Val(u)=x; return; } ri mid=l+r>>1;
		if(pos<=mid) Chg(lef(u),l,mid,pos,x);
		else Chg(rig(u),mid+1,r,pos,x); Push(u);
	}
	inline ll Qry(int u,int l,int r,int L,int R){
		if(l>=L&&r<=R) return Val(u); ri mid=l+r>>1; ll t=+oo;
		if(L<=mid) t=Qry(lef(u),l,mid,L,R);
		if(R>mid) t=min(t,Qry(rig(u),mid+1,r,L,R)); return t;
	}
}tr;
inline void Clear(){
	root=cntr=Dfn=tr.tot=0,tr.Val(0)=+oo;
	memset(head,0,sizeof(head)),
	memset(val,0,sizeof(val)),
	memset(dis,0x7f,sizeof(dis));
	vec.clear(),vis.reset();
	while(q.size()) q.pop();
}

inline int Find(int x){ return x==Fa[x]?x:Fa[x]=Find(Fa[x]); }
inline void Getfa(int n){ for(ri i=1;i<=n;++i) Fa[i]=i,E[i].clear(); }
inline void Kruskal(){
	sort(all(vec)); int cnt=0;
	for(edge t:vec){
		int u=t.u,v=t.v,f1=Find(u),f2=Find(v);
		if(f1==f2) continue;
		Fa[++now]=Fa[f1]=Fa[f2]=now,
		Add(now,f1),Add(now,f2);
		val[now]=t.l,++cnt;
		if(cnt==n-1) return;
	}
}
inline void Dfs(int u){
	dfn[u]=++Dfn;
	for(ri i=1;i<=18;++i)
		fa[u][i]=fa[fa[u][i-1]][i-1];
	tr.Chg(root,1,now,Dfn,dis[u]);
	gfore(u) if((v=e[i].to)!=fa[u][0]) fa[v][0]=u,Dfs(v);
	rig[u]=Dfn;
}

int main()
{
//	freopen("return5.in","r",stdin);
//	freopen("mine.out","w",stdout);
	int T; rd(T);
	while(T--){
		Clear();
		rd(n),rd(m),Getfa(n),now=n;
		for(ri i=1,u,v,l,a;i<=m;++i){
			rd(u),rd(v),rd(l),rd(a); edge t=edge(u,v,a,l);
			vec.push_back(t),E[u].push_back(t),E[v].push_back(edge(v,u,a,l));
		} Dijkstra(),Kruskal(),fa[now][0]=0,Dfs(now);
		int qr,k,s; rd(qr),rd(k),rd(s); ll lst=0;
		while(qr--){
			int v,p; rd(v),rd(p);
			v=(1ll*v+k*lst-1)%n+1;
			p=(1ll*p+k*lst)%(s+1);
			for(ri i=17;i>=0;--i)
				if(fa[v][i]&&val[fa[v][i]]>p) v=fa[v][i];
			writeln(lst=tr.Qry(root,1,now,dfn[v],rig[v]));
		}
	}	
	return 0;
}
2022/7/27 16:13
加载中...