记录编号 125254 评测结果 AAAAAAAA
题目名称 保卫钓鱼岛! 最终得分 100
用户昵称 Gravatar乌龙猹 是否通过 通过
代码语言 C++ 运行时间 0.237 s
提交时间 2014-10-08 07:25:55 内存使用 0.52 MiB
显示代码纯文本
#include<cstdio>
#define maxn 10001
using namespace std;
int n,m;
int Ans;
long long tsum;
bool flag=0;
struct Time
{
	int L,R,rd;
};
Time t[maxn];
struct Tree
{
	int ls,rs,rd;
};
Tree a[maxn];
void dfs(int,int);
int main()
{
	freopen("diaoyu.in","r",stdin);
	freopen("diaoyu.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<n;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		if(!a[x].ls)
		{
			a[x].ls=y;
			t[x].L=z;
			continue;
		}
		if(!a[x].rs)
		{
			a[x].rs=y;
			t[x].R=z;
			continue;
		}
		a[x].rd=y;
		t[x].rd=z;
	}
	for(int i=1;i<=m;i++)
	{
		flag=0;
		int x,y;
		scanf("%d%d",&x,&y);
		if(x==y) continue;
		dfs(x,y);
	}
	printf("%d\n%lld",Ans,tsum);
	return 0;
}
void dfs(int k,int en)
{
	if(k==en)
	{
		Ans++;
		flag=1;
		return;
	}
	if(a[k].ls)
	{
		tsum+=t[k].L;
		dfs(a[k].ls,en);
		if(!flag) tsum-=t[k].L;
		else return;
	}
	if(a[k].rs)
	{
		tsum+=t[k].R;
		dfs(a[k].rs,en);
		if(!flag) tsum-=t[k].R;
		else return;
	}
	if(a[k].rd)
	{
		tsum+=t[k].rd;
		dfs(a[k].rd,en);
		if(!flag) tsum-=t[k].rd;
		else return;
	}
}