HDU-6016(思维)(Count the sheep)

Count the Sheep

Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1299    Accepted Submission(s): 593
Problem Description
Altough Skipping the class is happy, the new term still can drive luras anxious which is of course because of the tests! Luras became worried as she wanted to skip the class, as well as to attend the BestCoder and also to prepare for tests at the same time.However, As the result of preparing for tests, luras had no time to practice programing. She didn't want to lose her rating after attending BC. In the end, she found BCround92's writer snowy_smile for help, asking him to leak her something.Snowy_smile wanted to help while not leaking the problems. He told luras, the best thing to do is to take a good rest according to the following instructions first."Imagine you are on the endless grassland where there are a group of sheep. And n sheep of them are silent boy-sheep while m sheep are crying girl-sheep. And there are k friend-relationships between the boy-sheep and girl-sheep.Now You can start from any sheep, keep counting along the friend relationship. If you can count 4 different sheep, you will exceed 99% sheep-counters and fall asleep."Hearing of the strange instructions, luras got very shocked. Still, she kept counting. Sure enough, she fell asleep after counting 4 different sheep immediately. And, she overslept and missed the BestCoder in the next day. At a result, she made it that not losing her rating in the BCround92!!!However, you don't have the same good luck as her. Since you have seen the 2nd problem, you are possible to have submitted the 1st problem and you can't go back.So, you have got into an awkward position. If you don't AC this problem, your rating might fall down.You question is here, please, can you tell that how many different 4-sheep-counting way luras might have before her sleep?In another word, you need to print the number of the "A-B-C-D" sequence, where A-B, B-C, C-D are friends and A,B,C,D are different.
 
Input
The first line is an integer T which indicates the case number.and as for each case, there are 3 integers in the first line which indicate boy-sheep-number, girl-sheep-number and friend-realationship-number respectively.Then there are k lines with 2 integers x and y in each line, which means the x-th boy-sheep and the y-th girl-sheep are friends.It is guaranteed that——There will not be multiple same relationships.1 <= T <= 1000for 30% cases, 1 <= n, m, k <= 100for 99% cases, 1 <= n, m, k <= 1000for 100% cases, 1 <= n, m, k <= 100000
 
Output
As for each case, you need to output a single line.there should be 1 integer in the line which represents the number of the counting way of 4-sheep-sequence before luras's sleep.
 
Sample Input
   
   
3 2 2 4 1 1 1 2 2 1 2 2 3 1 3 1 1 2 1 3 1 3 3 3 1 1 2 1 2 2
 

Sample Output
    
    
8 0 2
 

Source
 

题意理解:有一堆公羊和母羊,给定K个关系(一定是公羊和母羊的关系,同性的不能有发生直接关系\(^o^)/),让你找出从里面任意一头开始找。找到四头不同的羊。为你一共有多少种走法。

解题思路:此题如果暴力的一个个去找一定会超时,就必须想一点特殊的方法。首先我们先遍历一遍K个关系输入,把出现过哪只羊,我们就在这个羊出现次数上+1,羊的出现次数就是,这头羊连了多少条边。

                  如此图,每次找到的四个点一定会是这样的,那么我们再遍历一遍K个关系,把K个关系中的点,都想象成图中的2和3的那两个点,由这两个点往两边延伸,那么 就看这两头羊各自连了多少条边,若2连n条边,3连了m条边,那么这两个点就能延伸出(n-1)(m-1)*2个结果。再加结果不断加起来即可。

                                   











#include<stdio.h>
#include<string.h>
int boy[100010];
int girl[100010];
struct s{
	int boy;
	int girl;
}x[100010];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
    	int n,m,k;
    	scanf("%d%d%d",&n,&m,&k);
    	memset(boy,0,sizeof(boy));
    	memset(girl,0,sizeof(girl));
    	for(int i=0;i<k;i++)
    	{
    		scanf("%d%d",&x[i].boy,&x[i].girl);
    	    boy[x[i].boy]++;
			girl[x[i].girl]++;
		}
		long long  ans=0;
		for(int i=0;i<k;i++)
		{
			long long  temp=((long long )(boy[x[i].boy]-1)*(long long )(girl[x[i].girl]-1))*2;
			ans+=temp;
		}
		printf("%lld\n",ans);
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值