(HDU 5727)2016 Multi-University Training Contest 1 Necklace(搜索、图论)
2016-07-24 16:06
417 查看
题意
给你2*n个珠子,n个yang,n个yin,每个编号为1-n(题目居然不明说这一点,真坑)有m种情况,当a号yang珠子和b号yin珠子在一起的时候会变暗,求变暗的最小数量。思路
一开始我以为串出来的是一条线,然后愣了半天都没看懂。。官方题解说可以根据代价剪枝,好吧并不会剪 T T
做法是枚举所有yin的摆放情况,然后把yang放进去(因为变暗的是yang),至于能不能放,可以用无权值的二分图最大匹配算法(即匈牙利算法)。因为是一个环,起点并不重要,所以枚举yin的时候不需要改变第一个点的位置(情况数量为Annn,即An−1n种)
代码
#include <bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define rep(i,a,b) for(int i=a;i<b;i++) #define debug(a) printf("a =: %d\n",a); const int INF=0x3f3f3f3f; const int maxn=1e5+50; const int Mod=1e9+7; const double PI=acos(-1); typedef long long ll; using namespace std; int n,m; bool mp[233][233]; int status[15]; int ans; vector<int> G[15]; bool vis[15]; int mth[15]; bool find(int x){ int sz=G[x].size(); for(int i=0;i<sz;i++){ int v=G[x][i]; if (!vis[v]){ vis[v]=1; if (mth[v]==-1 || find(mth[v])){ mth[v]=x; return true; } } } return false; } int hungary(){ int ret=0; mem(mth,-1); for(int i=1;i<=n;i++){ mem(vis,0); if (find(i)){ ret++; } } return ret; } void work(){ for(int i=1;i<=n;i++) G[i].clear(); for(int j=1;j<=n;j++){ //yang for(int i=0;i<n;i++){//yin //枚举yin的摆放情况,把yang放进去 if (!mp[j][status[i]] && !mp[j][status[(i+1)%n]]){ G[j].push_back(status[i]); } } } ans=min(ans,n-hungary()); } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif while(~scanf("%d %d",&n,&m)){ mem(mp,0); if (n==0) {puts("0"); continue;} for(int i=0;i<m;i++){ int u,v; // Yang Yin scanf("%d %d",&u,&v); mp[u][v]=1; } //Yin for(int i=0;i<n;i++){ status[i]=i+1; } ans=INF; //排列一共A(n,n)种,因为是一个环,所以只需要考虑A(n,n)/n种 do work(); while(next_permutation(status+1,status+n)); printf("%d\n",ans); } return 0; }
相关文章推荐
- (HDU 5726)2016 Multi-University Training Contest 1 GCD(数学)
- hdu 5745 2016 Multi-University Training Contest 2 (暴力)
- HDU 1867 A + B for you again kmp算法
- (HDU 5724)2016 Multi-University Training Contest 1 Chess(SG函数、博弈)
- Factorial Trailing Zeroes
- leetcode 182. Duplicate Emails
- POJ3250——Bad Hair Day(栈的应用)
- 373. Find K Pairs with Smallest Sums
- UVA11374_Airport Express
- CodeForces 474C - Captain Marmot
- viterbi,维特比算法通俗理解
- ServletContainerInitializer初始化器
- ServletContainerInitializer初始化器
- 2016 Multi-University Training Contest 1 1001 Abandoned country
- HDU 5735 Born Slippy ( from:2016 Multi-University Training Contest 2 )
- 服务大众的人工智能---认知服务
- gdb调试core时能用i locals看栈变量、函数行(即不出现No symbol table info available)的必要条件: 1. 编译时有-g参数; 2.so库未被strip脱衣服
- bio nio aio
- 关于inputStream.available()方法获取下载文件的总大小
- 最容易读进去的深度学习科普贴