zoukankan      html  css  js  c++  java
  • [链表(linked list)] [洛谷] P1160 队列安排

    模拟链表

    #include <iostream>
    using namespace std;
    
    const int MAXN = 1e5 + 10;
    
    int head = 1;
    
    struct num
    {
        int right;
        int left;
    }arr[MAXN];
    
    void joinl(int x, int y)
    {
        arr[x].left = y;
    
        arr[x].right = arr[y].right;
        
        arr[ arr[y].right ].left = x;
    
        arr[y].right = x;
    }
    
    void joinr(int x, int y)
    {
        if(y == head)
        {
            head = x;
        }
    
        arr[x].left = arr[y].left;
    
        arr[x].right = y;
    
        arr[y].left = x;
        
        if(arr[x].left != -1)
        	arr[ arr[x].left ].right = x; 
    }
    
    void clear(int x)
    {
        if(x == head)
        {
            head = arr[x].left;
        }
    
        if(arr[x].left != -1)
        {
            arr[ arr[x].left ].right = arr[x].right;
        }
        
        if(arr[x].right != -1)
        {
            arr[ arr[x].right ].left = arr[x].left;
        }
        
        else
        {
            arr[ arr[x].left ].right = -1;
        }
       	arr[x].left = -1;
       	
       	arr[x].right = -1;
    
    }
    
    void put(int N)
    {
    	cout<<endl;
    	
    	for(int i = 1; i <= N; i++)
    	{
    		cout<<i<<' '<<arr[i].left<<' '<<arr[i].right<<endl;
    	}
    	
    	cout<<endl;
    }
    
    int main()
    {
        int N, k, p, M, t;
    
        cin>>N;
    
        for(int i = 1; i <= N; i++)
        {
            arr[i].right = -1;
            arr[i].left = -1;
        }
    
        for(int i = 2; i <= N; i++)
        {
            cin>>k>>p;
            
            if(p == 0)
            {
                joinr(i, k);
            }
            
            else
            {
                joinl(i, k);
            }
            
        }
    	
    	//put(N);
    	
        cin>>M;
    
        while(M--)
        {
            cin>>t;
    
            clear(t); 
            
        }
    
        int go = head;
        
    	while(1)
        {
            cout<<go<<' ';
    		
    		if(arr[go].right == -1)
    			break;
            
    		go = arr[go].right;
        }
    
    
        return 0;
    }
        
    
  • 相关阅读:
    退背包
    杜教筛BM
    Petya and Array CodeForces
    AC自动机模板
    KMP模板
    Docker系列器九:docker-compose与docker-compose.yml语法
    Fabric的简单Web应用
    ubuntu防火墙
    ubuntu16.04 HyperLedger Fabric 1.2.0 开发环境搭建
    crypto-config.yaml
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270553.html
Copyright © 2011-2022 走看看