zoukankan      html  css  js  c++  java
  • POJ 1988 Cube Stacking

    看完了并查集,找道题练练,发现还不是很熟练。。。本领还没到家啊!

    这道题的思路,就是每次记下该点到父结点的个数,并记录下其下的结点个数。之后,每次"C"时,将总的减去它所压的方块,即答案!!!(也是参考别人的~-?)

     

    <pre name="code" class="cpp">#include<stdio.h>
    #include<iostream>
    using namespace std;
    #define max 30010
    struct node
    {
    	int parent;//最上面的元素
    	int up;//   上面的个数
    	int down;// 下面的个数
    };
    struct node st[max];
    int find(int x)
    {
    	int p;
    	if(st[x].parent !=x)
    	{
    		p=st[x].parent ;
    		st[x].parent =find(st[x].parent);
    		st[x].up+=st[p].up;
    	}
    	return st[x].parent ;
    }
    void uion(int x,int y)
    {
    	x=find(x);
    	y=find(y);
    	st[y].parent=x;
    	st[y].up=st[x].down ;
    	st[x].down+=st[y].down ;
    }
    int main()
    {
    	char s[3];
    	int i,x,y;
    	int parent;
    	int n;
    	scanf("%d",&n);
    	for(i=0;i<max;i++)
    	{
    		st[i].parent=i;
    		st[i].down=1;
    		st[i].up=0;
    	}
    	while(n--)
    	{
    		scanf("%s",s);
    		if(s[0]=='M')
    		{
    			scanf("%d%d",&x,&y); 
    			uion(x,y);
    		}
    		else if(s[0]=='C')
    		{
    			scanf("%d",&x);
    			parent=find(x);
    			printf("%d
    ",st[parent].down -st[x].up -1);
    		}
    	}
    	return 0;
    }
    


    
    
    
  • 相关阅读:
    【流水账】2021-06-19 Day-09
    【流水账】2021-06-18 Day-08
    【流水账】2021-06-16 Day-06
    【流水账】2021-06-15 Day-05
    .Net调用Java的实现方法
    优先队列的实例题
    栈的相关程序题
    重载函数
    卡特兰数
    关于全排列的递归
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4477465.html
Copyright © 2011-2022 走看看