HDU 5235 Friends (2015 Multi-University Training Contest 2 搜尋+剪枝)
題目連結:傳送門
題意:
n個人給定m個關係,每個關係為x,y表示x,y是朋友,但是可能是online friends,也可能是offline friends.
要求每個人的online 和offline 朋友的數量是一樣多的,問有多少種可能。
分析:
n<=8, 因此m<=28.由題意可以知道,每個人的關係數必須為偶數,然後我們可以列舉一個關係的狀態,通過
每個人的online,與offline關係數量小於等於1/2關係總數來剪枝。
程式碼如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 10;
int du[maxn];
int n,m;
int on[maxn],off[maxn];
int edge[maxn*maxn][2];
int ans;
void dfs(int id){
if(id==m){
ans++;
return;
}
on[edge[id][0]]++;
on[edge[id][1]]++;
if(on[edge[id][0]]*2<=du[edge[id][0]]&&on[edge[id][1]]*2<=du[edge[id][1]])
dfs(id+1);
on[edge[id][0]]--;
on[edge[id][1]]--;
off[edge[id][0]]++;
off[edge[id][1]]++;
if(off[edge[id][0]]*2<=du[edge[id][0]]&&off[edge[id][1]]*2<=du[edge[id][1]])
dfs(id+1);
off[edge[id][0]]--;
off[edge[id][1]]--;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
ans=0;
memset(du,0,sizeof(du));
for(int i=0;i<m;i++){
scanf("%d%d",&edge[i][0],&edge[i][1]);
du[edge[i][0]]++;
du[edge[i][1]]++;
}
bool tag = 0;
if(m&1) tag=1;
for(int i=1;i<=n;i++) if(du[i]&1) tag=1;
if(tag){
puts("0");
continue;
}
memset(on,0,sizeof(on));
memset(off,0,sizeof(off));
dfs(0);
printf("%d\n",ans);
}
return 0;
}
相關文章
- 2018 Multi-University Training Contest 3 - HDU ContestAI
- HDU 6039 Gear Up(2017 Multi-University Training Contest 1)AI
- HDU4620 Fruit Ninja Extreme(搜尋+剪枝)UIREM
- 2018 Multi-University Training Contest 9----hdu 6415 Rikka with Nash EquilibriumAIUI
- HDU-2016 Multi-University Training Contest 3-Sqrt Bo-大數開方AI
- 【HDU5734 2016 Multi-University Training Contest 2A】【公式代入推導】Acperience n維向量各有加減最小模長AI公式
- 【HDU5735 2016 Multi-University Training Contest 2B】【暴力做法 + 折半法】Born Slippy 祖先鏈的最大運算權值AI
- 【HDU5738 2016 Multi-University Training Contest 2E】【平面點數計數 共線判定】Eureka 平面有多少個集合滿足貢獻AI
- [leetcode 87 擾亂字串] [剪枝搜尋]LeetCode字串
- HDU 4620 Fruit Ninja Extreme(搜尋)UIREM
- HDU5348 MZL's endless loop (搜尋)OOP
- HDU 5119 Happy Matt Friends(DP)APP
- HDU-3172 Virtual Friends 並查集+map並查集
- iOS - 模糊搜尋 2iOS
- HDU 1241Oil Deposits(簡單搜尋題)
- HDU 5469 Antonidas(樹上的字串匹配/搜尋)字串匹配
- [ElasticSearch ]2輕量級搜尋Elasticsearch
- HDU 5119 Happy Matt Friends(簡單二維dp)APP
- MarketingCharts:2015年Google搜尋排名GCGo
- vue2實現搜尋結果中的搜尋關鍵字高亮Vue
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- 海量資料搜尋---搜尋引擎
- BFS廣度優先搜尋(11)--hdu2102(基礎題)
- Ascend2:2015年搜尋引擎優化調查報告(附下載)優化
- IgnitionOne:2015年Q2美國付費搜尋廣告同比增長22%None
- 搜尋引擎-03-搜尋引擎原理
- Win10 20H1/20H2搜尋框如何禁用網路搜尋 Win10 20H1/20H2搜尋框禁用網路搜尋的步驟Win10
- [每天get點新技能]搜商——搜尋發展簡史(2)
- 搜尋引擎es-分詞與搜尋分詞
- BFS廣度優先搜尋(4)--hdu2717(poj3278)(基礎題)
- 2014廣州網路賽1003||hdu 5024 搜尋
- ionic2/ionic3 實現搜尋結果中的搜尋關鍵字高亮
- Elasticsearch搜尋調優權威指南 (2/3)Elasticsearch
- 假期充電 Day 2 —— 檔案搜尋工具
- Select2非同步搜尋資料非同步
- elasticsearch搜尋Elasticsearch
- 字串搜尋字串
- vim搜尋