提交记录 11166


用户 题目 状态 得分 用时 内存 语言 代码长度
flwfdd noip18f. 【NOIP2018】保卫王国 Wrong Answer 0 2 s 13364 KB C++ 2.29 KB
提交时间 评测时间
2019-11-02 12:41:10 2020-08-01 02:39:41
#include<bits/stdc++.h>
using namespace std;

int n,m,c,w[100100],head[100100],f[100100][2],ct[100100],fa[100100],dp[100100],mf[100100][2];
char type[10];

struct Edge{
	int to,nxt;
}e[200200];

queue<int>change;

void read()
{
	int m1,m2;
	cin>>n>>m>>type;
	for(int i=1;i<=n;i++)scanf("%d",&w[i]);
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&m1,&m2);
		e[++c].to=m2;
		e[c].nxt=head[m1];
		head[m1]=c;
		
		e[++c].to=m1;
		e[c].nxt=head[m2];
		head[m2]=c;
	}
}

void init(int k)
{
	int m=0x7fffffff,p;
	ct[k]=1;
	f[k][1]=w[k];
	dp[k]=dp[fa[k]]+1;
	for(int i=head[k];i;i=e[i].nxt)
	{
		if(e[i].to==fa[k])continue;
		fa[e[i].to]=k;
		init(e[i].to);
		ct[k]+=ct[e[i].to];
		f[k][1]+=min(f[e[i].to][0],f[e[i].to][1]); 
		if(f[e[i].to][1]<m)
		{
			m=f[e[i].to][1];
			p=e[i].to;
		}
		if(f[e[i].to][1]<=f[e[i].to][0] || ct[e[i].to]==1)
		{
			m=0;
			f[k][0]+=f[e[i].to][1];
		}
		else f[k][0]+=f[e[i].to][0];
	}
	if(m && m!=0x7fffffff)f[k][0]=f[k][0]-f[p][0]+f[p][1];
}

void update(int k)
{
	int m=0x7fffffff,p;
	change.push(k);
	f[k][1]=w[k];
	f[k][0]=0;
	for(int i=head[k];i;i=e[i].nxt)
	{
		if(e[i].to==fa[k])continue;
		f[k][1]+=min(f[e[i].to][0],f[e[i].to][1]); 
		if(f[e[i].to][1]<m)
		{
			m=f[e[i].to][1];
			p=e[i].to;
		}
		if(f[e[i].to][1]<=f[e[i].to][0] || ct[e[i].to]==1)
		{
			m=0;
			f[k][0]+=f[e[i].to][1];
		}
		else f[k][0]+=f[e[i].to][0];
	}
	if(m && m!=0x7fffffff)f[k][0]=f[k][0]-f[p][0]+f[p][1];
	//printf("%d#%d %d\n",k,f[k][0],f[k][1]);
}

void solve()
{
	int m1,m2,m3,m4,mm=-1;
	for(int i=0;i<m;i++)
	{
		scanf("%d%d%d%d",&m1,&m2,&m3,&m4);
		mm=-1;
		if(m1==1)mm=m2;
		else if(m3==1)mm=m4;
		change.push(m1);
		f[m1][!m2]=0x3f3f3f3f;
		change.push(m3);
		f[m3][!m4]=0x3f3f3f3f;
		if(dp[m3]>dp[m1])swap(m1,m3),swap(m2,m4);
		if(dp[m1]>dp[m3])
		{
			while(dp[m1]>dp[m3])update(fa[m1]),m1=fa[m1];
		}
		while(m1!=m3)
		{
			update(fa[m1]);
			update(fa[m3]);
			m1=fa[m1];
			m3=fa[m3];
		}
		while(m1)update(fa[m1]),m1=fa[m1];
		
		if(mm!=-1)printf("%d\n",f[1][mm]<0x3f3f3f3f?f[1][mm]:-1);
		else printf("%d\n",min(f[1][0],f[1][1])<0x3f3f3f3f?min(f[1][0],f[1][1]):-1);
		while(!change.empty())
		{
			mm=change.front();change.pop();
			f[mm][0]=mf[mm][0];
			f[mm][1]=mf[mm][1];
		}
	}
}

int main()
{
	read();
	init(1);
	//for(int i=1;i<=n;i++)printf("%d#%d %d\n",i,f[i][0],f[i][1]);
	memcpy(mf,f,sizeof(f));
	solve();
} 

CompilationN/AN/ACompile OKScore: N/A

Testcase #1194.78 us844 KBWrong AnswerScore: 0

Testcase #2199.96 us844 KBWrong AnswerScore: 0

Testcase #3203.31 us844 KBWrong AnswerScore: 0

Testcase #4189.73 us844 KBWrong AnswerScore: 0

Testcase #5300.43 us856 KBWrong AnswerScore: 0

Testcase #6307.78 us856 KBWrong AnswerScore: 0

Testcase #7279.23 us848 KBWrong AnswerScore: 0

Testcase #836.447 ms1 MB + 92 KBWrong AnswerScore: 0

Testcase #935.361 ms1 MB + 92 KBWrong AnswerScore: 0

Testcase #1018.858 ms1020 KBWrong AnswerScore: 0

Testcase #1119.037 ms1020 KBWrong AnswerScore: 0

Testcase #122 s13 MB + 52 KBTime Limit ExceededScore: 0

Testcase #132 s13 MB + 52 KBTime Limit ExceededScore: 0

Testcase #142 s13 MB + 52 KBTime Limit ExceededScore: 0

Testcase #152 s13 MB + 52 KBTime Limit ExceededScore: 0

Testcase #162 s13 MB + 52 KBTime Limit ExceededScore: 0

Testcase #172 s13 MB + 48 KBTime Limit ExceededScore: 0

Testcase #182 s5 MB + 92 KBTime Limit ExceededScore: 0

Testcase #192 s5 MB + 92 KBTime Limit ExceededScore: 0

Testcase #202 s8 MB + 648 KBTime Limit ExceededScore: 0

Testcase #212 s8 MB + 648 KBTime Limit ExceededScore: 0

Testcase #222 s8 MB + 648 KBTime Limit ExceededScore: 0

Testcase #232 s8 MB + 644 KBTime Limit ExceededScore: 0

Testcase #242 s8 MB + 648 KBTime Limit ExceededScore: 0

Testcase #252 s8 MB + 660 KBTime Limit ExceededScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-28 06:50:08 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠