1. 程式人生 > >Aizu 2170 Marked Ancestor

Aizu 2170 Marked Ancestor

span isp pla ret a20 col close bsp spl

題意:出一顆樹,有兩種操作:
1. mark u 標記結點u
2.query u 詢問離u最近的且被標記的祖先結點是哪個
讓你輸出所有詢問的和。

思路:數據量太小,直接暴力dfs就可以了

技術分享
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<queue>
#include
<string> #include<algorithm> #define MAXSIZE 100005 #define LL long long using namespace std; int vis[MAXSIZE],pre[MAXSIZE]; LL dfs(int p) { if(vis[p]) return p; return dfs(pre[p]); } int main() { int n,m,num; LL sum; char op[5]; while(scanf("
%d%d",&n,&m),n+m) { sum = 0; memset(vis,0,sizeof(vis)); vis[1] = 1; for(int i=2;i<=n;i++) { scanf("%d",&num); pre[i] = num; } while(m--) { scanf("%s%d",op,&num);
if(op[0] == Q) { sum += dfs(num); } else { vis[num] = 1; } } printf("%lld\n",sum); } return 0; }
View Code

Aizu 2170 Marked Ancestor