HDU:6016 Count the Sheep(思維)

Count the Sheep  Accepts: 227   Submissions: 805
 Time Limit: 3000/1500 MS (Java/Others)   Memory Limit: 65536/65536 K (Java/Others)
問題描述
開學翹課固然快樂,然而也有讓呃喵抓狂的事,那當然就是考試了!這可急壞了既要翹課又想要打BC還要準備考試的呃喵。
呃喵爲了準備考試沒有時間刷題,想打BC又不想跌分,只得求助於BCround92的出題人snowy_smile,讓他說點什麼 ~~>_<~~。
snowy_smile實在沒有辦法,但是又不好意思透題,只好告訴呃喵,當務之急是好好休息。
"如果你按照下面這個辦法睡着,那麼第二天就絕對不會在BC的賽場上跌分——
想象一片一望無際、廣闊無邊的青青草原,草原上住着一羣羊,包括n只沉默的男羊和m只流淚的女羊,在男羊和女羊之間,存在k個朋友關係。
現在你可以以任意一隻羊爲起點,順着朋友關係數下去。如果能夠連續數4只各不相同的羊,就能超過99%的數羊者,成功入睡。"
呃喵聽後十分震驚,但她還是聽話地數下去,果然,數到第4只羊就睡着了,並一口氣睡過了頭,成功地錯過了第二天的BestCoder,真的不會在BC的賽場上跌分啦!
然而你,可就沒有這麼好的運氣了,你既然看到了這第二題,自然一般已有提交,已經無法回頭了。
面對"不AC這題就可能跌分"窘境的你,需要說出,呃喵在睡前可能有多少種不同的數羊序列。
即輸出"A-B-C-D"這樣序列的方案數,滿足A-B、B-C、C-D是朋友關係且A、B、C、D各不相同。
輸入描述
第一行輸入數據組數T
對於每組數據,第一行有三個整數n, m, k,表示n只男羊編號分別爲1~n,m只女羊編號分別爲1~m,並且存在k個朋友關係。
接下來給出k行,每行給出兩個數x y,表示第x只男羊和第y只女羊是朋友。


數據保證——
不會給出重複的朋友關係
1 <= T <= 1000
對於30%的數據,1 <= n, m, k <= 100
對於99%的數據,1 <= n, m, k <= 1000
對於100%的數據,1 <= n, m, k <= 100000
輸出描述
對於每組數據,輸出一行,該行包含一個整數,表示呃喵睡覺前可能數了哪4只羊的序列的方案數。
輸入樣例
(爲了方便閱讀,樣例輸入中數據組間中會額外添加一行空行)
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
輸出樣例
8
0
2
Hint

第一組樣例:(b1-g1-b2-g2) (b1-g2-b2-g1) (b2-g1-b1-g2) (b2-g2-b1-g1) (g1-b1-g2-b2) (g1-b2-g2-b1) (g2-b1-g1-b2) (g2-b2-g1-b1) 共8種合法序列




解題思路:假設A-B-C-D這樣,我們枚舉中間B-C這倆點,那麼B點的左側能貢獻dig[B]-1個點(-1是除了右邊的C點),C點的右側能貢獻dig[C]-1個點(-1是除了左邊的B點),這樣每組點對就能貢獻(dig[B]-1)*(dig[C]-1)個情況了。

代碼如下:

#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
long long dig[200010];
vector<int > vc[200010];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,m,k;
		memset(dig,0,sizeof(dig));
		scanf("%d%d%d",&n,&m,&k);
		for(int i=1;i<=n+m;i++)
		{
			vc[i].clear();
		}
		for(int i=1;i<=k;i++)
		{
			int b,g;
			scanf("%d%d",&b,&g);
			g=g+n;//
			vc[b].push_back(g);
			vc[g].push_back(b);
			dig[b]++;
			dig[g]++;
		}
		long long ans=0;
		for(int i=1;i<=n+m;i++)
		{
			for(int j=0;j<vc[i].size();j++)
			{
				int v=vc[i][j];
				ans=ans+(dig[i]-1)*(dig[v]-1);
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
 } 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章