提交记录 4172


用户 题目 状态 得分 用时 内存 语言 代码长度
fishinthepool noi18a. 【NOI2018】归程 Wrong Answer 65 613.935 ms 22900 KB C++ 2.23 KB
提交时间 评测时间
2018-07-18 22:12:55 2020-07-31 22:38:15
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define fo(i,a,b) for (i=a; i<=b; i++)
using namespace std;

const int N=200005, M=400005;
int t0, n, m, q, k0, s, i, j, x, y, t1, t2, t, lans, ans;
int lst[N], e[M*2][4];
int f[N], d[N], h[N];
bool bz[N];
bool flag, flag2;
struct que{int x, h, i;}c[N];
struct map{int x, y, h;}c2[M];

void link(int x,int y)
{
	e[++t][0]=lst[x], e[t][1]=y, e[t][2]=t1, e[t][3]=t2, lst[x]=t;
}

void up(int x)
{
	int y=x>>1;
	while (y && f[d[x]]<f[d[y]])
	{
		swap(d[x],d[y]), h[d[x]]=x, h[d[y]]=y;
		x=y, y=x>>1;
	}
}
void down()
{
	int x=1, y=2;
	while ((y<=t && f[d[x]]>f[d[y]]) || (y<t && f[d[x]]>f[d[y+1]]))
	{
		if (y<t && f[d[y+1]]<f[d[y]]) y++;
		swap(d[x],d[y]), h[d[x]]=x, h[d[y]]=y;
		x=y, y=x<<1;
	}
}
void spfa()
{
	t=d[1]=h[1]=1;
	memset(f,120,sizeof(f)), f[1]=0; int w0=f[2]; 
	memset(bz,0,sizeof(bz));
	while (t)
	{
		int x=d[1], i=lst[x]; bz[x]=1; 
		while (i)
		{
			int y=e[i][1]; 
			if (!bz[y] && f[x]+e[i][2]<f[y])
			{
				bool flag=(f[y]==w0); f[y]=f[x]+e[i][2];
				if (flag) h[y]=++t, d[t]=y, up(t); else up(h[y]);
			}
			i=e[i][0];
		}
		h[x]=0, h[d[t]]=1, d[1]=d[t], t--, down();
	}
}

bool cmp(que a,que b) {return a.h>b.h;}
bool cmp2(map a,map b) {return a.h>b.h;}

int find(int x)
{
	if (h[x]==x) return x;
	return h[x]=find(h[x]);
}
void merge(int x,int y)
{
	x=find(x), y=find(y), h[x]=y, f[y]=min(f[x],f[y]);
}

int main()
{
	scanf("%d",&t0);
	while (t0)
	{
		memset(lst,0,sizeof(lst)), t=lans=0;
		t0--, scanf("%d%d",&n,&m), flag=flag2=1;
		fo(i,1,m) 
		{
			scanf("%d%d%d%d",&x,&y,&t1,&t2), link(x,y), link(y,x);
			if (t2>1) flag=0;  if (x+1!=y) flag2=0;
		}
		scanf("%d%d%d",&q,&k0,&s);
		if (flag)
		{
			spfa(); //
			fo(i,1,q)
			{
				scanf("%d%d",&x,&y);
				if (!y) printf("0\n"); else printf("%d\n",f[x]);
			}
		}
		else
		{
			spfa(); //
			fo(i,1,q) scanf("%d%d",&c[i].x,&c[i].h), c[i].i=i;
			sort(c+1,c+q+1,cmp), t=0;
			fo(x,1,n)
			{
				i=lst[x], h[x]=x;
				while (i)
				{
					y=e[i][1];
					if (y<x) c2[++t].x=y, c2[t].y=x, c2[t].h=e[i][3];
					i=e[i][0];
				}
			}
			sort(c2+1,c2+m+1,cmp2);
			j=1; 
			fo(i,1,q)
			{
				while (j<=m && c2[j].h>c[i].h) merge(c2[j].x,c2[j].y), j++;
				d[c[i].i]=f[find(c[i].x)];
			}
			fo(i,1,q) printf("%d\n",d[i]);
		}
	}
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1224.52 us1 MB + 760 KBAcceptedScore: 5

Testcase #2248.84 us1 MB + 764 KBAcceptedScore: 5

Testcase #3407.3 us1 MB + 768 KBAcceptedScore: 5

Testcase #4484.36 us1 MB + 772 KBAcceptedScore: 5

Testcase #53.106 ms1 MB + 924 KBAcceptedScore: 5

Testcase #6382.61 ms16 MB + 296 KBAcceptedScore: 5

Testcase #73.153 ms1 MB + 904 KBAcceptedScore: 5

Testcase #83.127 ms1 MB + 908 KBAcceptedScore: 5

Testcase #93.129 ms1 MB + 904 KBAcceptedScore: 5

Testcase #10309.997 ms14 MB + 988 KBAcceptedScore: 5

Testcase #11304.684 ms15 MBWrong AnswerScore: 0

Testcase #12613.935 ms21 MB + 996 KBAcceptedScore: 5

Testcase #13612.905 ms21 MB + 992 KBAcceptedScore: 5

Testcase #14613.837 ms21 MB + 1000 KBAcceptedScore: 5

Testcase #154.604 ms1 MB + 992 KBWrong AnswerScore: 0

Testcase #164.472 ms1 MB + 992 KBWrong AnswerScore: 0

Testcase #17613.338 ms21 MB + 948 KBWrong AnswerScore: 0

Testcase #18613.205 ms21 MB + 948 KBWrong AnswerScore: 0

Testcase #19229.445 ms22 MB + 352 KBRuntime ErrorScore: 0

Testcase #20228.688 ms22 MB + 372 KBRuntime ErrorScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-14 01:24:33 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠