记录编号 127566 评测结果 AAAAAAAA
题目名称 保卫钓鱼岛! 最终得分 100
用户昵称 GravatarMINE·MINE 是否通过 通过
代码语言 C++ 运行时间 0.009 s
提交时间 2014-10-15 20:55:31 内存使用 0.57 MiB
显示代码纯文本
#include<cstdio>
#include<queue>
using namespace std;
#define Size 10001
int n,m;
struct Line
{
	int next;
	int to;
	int data;
}net[Size]={0};
int head[Size]={0};
int root=0;
int father[Size]={0};
void dispose(int,int,int);
void find(int);
void search(int);
int degree[Size]={0};
long long tot=0,ans=0;
int dis[Size]={0};
int main()
{
	freopen("diaoyu.in","r",stdin);
	freopen("diaoyu.out","w",stdout);
	scanf("%d%d",&n,&m);
	int start,end,i,j,data;	
	for(i=1;i<n;i++)
	{
		scanf("%d%d%d",&start,&end,&data);
		dispose(start,end,data);
		father[end]=start;
	}
	find(1);
	search(root);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&start,&end);
		if(degree[start]<degree[end])
		{
			tot++;
			ans+=dis[end]-dis[start];
		}
	}
	printf("%lld\n%lld",tot,ans);
	return 0;
}
void find(int x)
{
	if(!father[x])
	{
		root=x;
		return ;
	}
	else
	find(father[x]);
}
void search(int x)
{
	queue<int> q;
	degree[x]=1;
	q.push(x);
	while(!q.empty())
	{
		int k=q.front();
		for(int i=head[k];i!=0;i=net[i].next)
		{
			int t=net[i].to;
			degree[t]=degree[k]+1;
			dis[t]=dis[k]+net[i].data;
			q.push(t);
		}
		q.pop();
	}
}
void dispose(int x,int y,int z)
{
	head[0]++;
	net[head[0]].data=z;
	net[head[0]].next=head[x];
	net[head[0]].to=y;
	head[x]=head[0];
}