提交记录 3726


用户 题目 状态 得分 用时 内存 语言 代码长度
Infleaking noi18a. 【NOI2018】归程 Time Limit Exceeded 60 4 s 68836 KB C++ 2.20 KB
提交时间 评测时间
2018-07-18 15:32:46 2020-07-31 21:24:18
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=200100,M=800100;
int w[M],ne[M],la[N],len[M],at[M];
int fa[N],pr[N],md[N],vis[N],size[N];
int s[N],d[N*100],n,m,T,t,Q,K,S;
int sl[N],sr[N],lg[N];
struct sns{int fr,pr,to,md;}c[M];
bool comp2(sns a,sns b){
	if (a.to==b.to)return a.pr>b.pr;
	return a.to<b.to;
}
struct edge{int x,y,l,a;}b[M];
void link(int x,int y,int l,int a){
	w[++t]=y;
	ne[t]=la[x];
	la[x]=t;
	len[t]=l;
	at[t]=a;
}
bool comp(edge a,edge b){return a.a>b.a;}
int gf(int x){return fa[x]==x?x:gf(fa[x]);}
void merge(int x,int y,int at){
	if (x==y)return;
	if (size[x]<size[y])swap(x,y);
	fa[y]=x;
	size[x]=max(size[x],size[y]+1);
	pr[y]=at;
	md[x]=min(md[x],md[y]);
}
int read(){
	char e=getchar();
	while (!('0'<=e&&e<='9'))e=getchar();
	int w=0;
	for (;'0'<=e&&e<='9';e=getchar())w=w*10+e-'0';
	return w;
}
int main(){
for (T=read();T--;){
	memset(la,0,sizeof la);
	n=read();m=read();
	for (int i=2;i<=2*n;i++)lg[i]=lg[i>>1]+1;
	for (int i=1;i<=n;i++)fa[i]=i,pr[i]=1<<30,size[i]=1;
	t=0;
	for (int i=1;i<=m;i++){
		int x=read(),y=read(),l=read(),a=read();
//		scanf("%d%d%d%d",&x,&y,&l,&a);
		b[i]=(edge){x,y,l,a};
		link(x,y,l,a);
		link(y,x,l,a);
	}
	memset(s,127,sizeof s);
	int l=0,r=1;d[1]=1;s[1]=0;vis[1]=1;
	while (l<r){
		int x=d[++l];
		for (int y=la[x];y;y=ne[y]){
			int z=w[y];
			if (s[z]>s[x]+len[y]){
				s[z]=s[x]+len[y];
				if (!vis[z]){
					vis[z]=1;
					d[++r]=z;
					if (s[z]<s[d[l+1]])
					swap(d[r],d[l+1]);
				}
			}
		}
		vis[x]=0;
	}
	for (int i=1;i<=n;i++)md[i]=s[i];
	sort(b+1,b+m+1,comp);
	for (int i=1;i<=m;i++)merge(gf(b[i].x),gf(b[i].y),b[i].a);
	t=0;
	for (int i=1;i<=n;i++){
		if (fa[i]!=i)c[++t]=(sns){i,pr[i],fa[i],md[i]};
		c[++t]=(sns){i,1<<30,i,s[i]};
	}
	sort(c+1,c+t+1,comp2);
	for (int i=2;i<=t+1;i++){
		if (c[i].to==c[i-1].to)c[i].md=min(c[i].md,c[i-1].md);
		else sl[c[i].to]=i;
	}
	sl[n+1]=t+1;
	int lasans=0;
	for (Q=read(),K=read(),S=read();Q--;){
		int v=read(),p=read(),can=0;
//		scanf("%d%d",&v,&p);
		v=(v+K*lasans-1)%n+1;
		p=(p+K*lasans)%(S+1);
		while (fa[v]!=v&&pr[v]>p)v=fa[v],can=1;
		int k=sl[v];
		for (int i=1<<lg[sl[v+1]-sl[v]];i;i>>=1)
			if (c[k+i].to==v&&c[k+i].pr>p)k+=i;
		printf("%d\n",lasans=min(c[k].md,s[v]));
		
	}
}} 

CompilationN/AN/ACompile OKScore: N/A

Testcase #1201.68 us1 MB + 592 KBAcceptedScore: 5

Testcase #2218.62 us1 MB + 608 KBAcceptedScore: 5

Testcase #3317.51 us1 MB + 616 KBAcceptedScore: 5

Testcase #4434.38 us1 MB + 628 KBAcceptedScore: 5

Testcase #54.017 ms1 MB + 960 KBAcceptedScore: 5

Testcase #64 s63 MB + 744 KBTime Limit ExceededScore: 0

Testcase #73.041 ms1 MB + 812 KBAcceptedScore: 5

Testcase #83.045 ms1 MB + 816 KBAcceptedScore: 5

Testcase #93.049 ms1 MB + 812 KBAcceptedScore: 5

Testcase #10387.511 ms26 MB + 236 KBAcceptedScore: 5

Testcase #11388.581 ms26 MB + 240 KBAcceptedScore: 5

Testcase #124 s64 MB + 968 KBTime Limit ExceededScore: 0

Testcase #134 s64 MB + 120 KBTime Limit ExceededScore: 0

Testcase #144 s62 MB + 60 KBTime Limit ExceededScore: 0

Testcase #154.636 ms1 MB + 936 KBAcceptedScore: 5

Testcase #164.741 ms1 MB + 940 KBAcceptedScore: 5

Testcase #174 s65 MB + 868 KBTime Limit ExceededScore: 0

Testcase #184 s64 MB + 560 KBTime Limit ExceededScore: 0

Testcase #194 s65 MB + 676 KBTime Limit ExceededScore: 0

Testcase #204 s67 MB + 228 KBTime Limit ExceededScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-18 02:45:35 | Loaded in 2 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠