杭电2818
来源:互联网 发布:adobe ps mac 破解版 编辑:程序博客网 时间:2024/06/01 11:24
参考了网上某些大神的思路,之后自己独立写了出来。
首先要把题读懂,这是关键。
计算的是x下面的箱子的数量,用up,down数组分别表示x上面盒子的数量和下面盒子的数量。利于此题的解答。
附上代码:
#include<stdio.h>const int N=30000+10;int a[N],up[N],down[N];int n,m;void makeset(){ int i; for(i=0;i<N;i++) { a[i]=i; up[i]=0; down[i]=1; }}int find1(int n){ int t; t=a[n]; if(t!=n) { a[n]=find1(t); up[n]+=up[t]; } return a[n];}void union1(int x,int y){ int px=find1(x); int py=find1(y); if(px!=py) { a[py]=px; up[py]=down[px]; down[px]+=down[py]; }}void count1(int x){ int root=find1(x); printf("%d\n",down[root]-up[x]-1);}int main(){ int i,j,k; int a1,b1,c1; while(scanf("%d",&n)==1) { getchar(); makeset(); while(n--) { char ch; scanf("%c",&ch); if(ch=='M') { scanf("%d%d",&a1,&b1); union1(a1,b1); } else if(ch=='C') { scanf("%d",&c1); count1(c1); } getchar(); } } return 0;}
0 0
- 杭电2818
- 杭电
- 杭电
- 杭电
- 杭电 1234 和 杭电 2115
- 杭电2056之Rectangles 杭电
- 杭电ACM1061Rightmost Digit
- 杭电2099 7.11
- 杭电ACM 1003
- 杭电 ACM 2016
- 杭电ACM1466
- 杭电ACM1003
- 杭电ACM1225
- 杭电ACM2023
- 杭电ACM2602
- 杭电ACM2955
- 杭电ACM3198
- 杭电ACM2028 求教
- 顺序栈 链栈
- 设计模式7——桥接模式
- 有个函数:char* reverse(char *buf)
- Java中hashCode()的使用
- Mono Develop脚本编辑器介绍
- 杭电2818
- 当自定义leftBarButtonItem(s)左边缘滑动失效时
- 【剑指Offer面试编程题】题目1387:斐波那契数列--九度OJ
- java传值与传引用的三种情况
- 自定义的AsyncTaskLoader类使用指南
- java中synchronized的用法详解
- C++ 根据操作系统版本调用不同的动态链接库
- 怎么判断两个工程师谁的代码能力强?【改编】
- 猴子报数