专题四1023

本文解决了一个关于体育馆座位安排的问题,通过使用并查集算法来判断座位安排请求是否存在冲突,并统计冲突的数量。

题意:

有n个人坐在体育馆里面,然后给出m个他们之间的距离, A B X, 代表B的座位比A多X. 然后求出这m个关系之间有多少错误

解题思路

找出出现冲突的位置,判断冲突很简单就是当两个人在同一行坐,同时他们到根节点的距离差值正好是他们之间的差值,此时就出现了冲突了。

AC源码

    #include<cstdio>  
    #include<cmath>  
    using namespace std;  
    #define N 1000 
    int f[N], rank[N], n, m;  
      
    void init(){  
        for(int i=0; i<=n; ++i)  
            f[i]=i, rank[i]=0;  
    }  
    int find(int x){  
        if(x==f[x]) return f[x];  
        int t=f[x];  
        f[x] = find(f[x]);  
        rank[x] += rank[t];  
        return f[x];  
    }  
    bool Union(int x,int y, int m){  
        int a=find(x), b=find(y);  
        if(a==b){  
            if(rank[x]+m!=rank[y])  
                return false;  
            return true;  
        }  
        f[b] = a;  
        rank[b] = rank[x]+m-rank[y];  
        return true;  
    }  
      
    int main(){  
        int a,b,x;  
        while(~scanf("%d%d",&n,&m)){  
            init();  
            int cnt=0;  
            for(int i=0; i<m; ++i){  
                scanf("%d%d%d",&a,&b,&x);  
                if(!Union(a, b, x)){  
                    ++cnt;  
                }  
            }  
            printf("%d\n",cnt);  
        }  
        return 0;  
    } 



Problem W

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 28   Accepted Submission(s) : 10
Problem Description
In 12th Zhejiang College Students Games 2007, there was a new stadium built in Zhejiang Normal University. It was a modern stadium which could hold thousands of people. The audience Seats made a circle. The total number of columns were 300 numbered 1--300, counted clockwise, we assume the number of rows were infinite.<br>These days, Busoniya want to hold a large-scale theatrical performance in this stadium. There will be N people go there numbered 1--N. Busoniya has Reserved several seats. To make it funny, he makes M requests for these seats: A B X, which means people numbered B must seat clockwise X distance from people numbered A. For example: A is in column 4th and X is 2, then B must in column 6th (6=4+2).<br>Now your task is to judge weather the request is correct or not. The rule of your judgement is easy: when a new request has conflicts against the foregoing ones then we define it as incorrect, otherwise it is correct. Please find out all the incorrect requests and count them as R.<br>
 

Input
There are many test cases:<br>For every case: <br>The first line has two integer N(1<=N<=50,000), M(0<=M<=100,000),separated by a space.<br>Then M lines follow, each line has 3 integer A(1<=A<=N), B(1<=B<=N), X(0<=X<300) (A!=B), separated by a space.<br><br>
 

Output
For every case: <br>Output R, represents the number of incorrect request.<br>
 

Sample Input
   
10 10 1 2 150 3 4 200 1 5 270 2 6 200 6 5 80 4 7 150 8 9 100 4 8 50 1 7 100 9 2 100
 

Sample Output
   
2 <div style='font-family:Times New Roman;font-size:14px;background-color:F4FBFF;border:#B7CBFF 1px dashed;padding:6px'><div style='font-family:Arial;font-weight:bold;color:#7CA9ED;border-bottom:#B7CBFF 1px dashed'><i>Hint</i></div> Hint: (PS: the 5th and 10th requests are incorrect) </div>
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值