Aizu 2170 Marked Ancestor
阿新 • • 發佈:2017-08-05
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> #includeView Code<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; }
Aizu 2170 Marked Ancestor