记录编号 |
125254 |
评测结果 |
AAAAAAAA |
题目名称 |
保卫钓鱼岛! |
最终得分 |
100 |
用户昵称 |
乌龙猹 |
是否通过 |
通过 |
代码语言 |
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;
- }
- }