ZOJ 2521 —— LED Display(二分匹配,最小路径覆盖)
2014-08-17 10:39
483 查看
题目:LED Display
题意:要显示一系列数字,但是由于灯的缺陷,显示某个数字之后只能通过灭掉当前亮的一些位置来得到新的数字,也不能连续显示两个相同的数字。问最少需要多少个LED灯才能按顺序显示出所有数字。
由于数字显示是有顺序的,所以可以想到按照顺序构造一个有向图,问题就转化成一个最小路径覆盖了。
而最小路径覆盖可以通过二分匹配算法来求解。
最小路径覆盖 = 点数 - 最大匹配。
至于数字显示顺序,我是直接人肉了。
题意:要显示一系列数字,但是由于灯的缺陷,显示某个数字之后只能通过灭掉当前亮的一些位置来得到新的数字,也不能连续显示两个相同的数字。问最少需要多少个LED灯才能按顺序显示出所有数字。
由于数字显示是有顺序的,所以可以想到按照顺序构造一个有向图,问题就转化成一个最小路径覆盖了。
而最小路径覆盖可以通过二分匹配算法来求解。
最小路径覆盖 = 点数 - 最大匹配。
至于数字显示顺序,我是直接人肉了。
#include<cstdio> #include<cstring> #include<vector> using namespace std; bool mat[10][10]; void init(){ memset(mat,0,sizeof(mat)); mat[0][1] = mat[0][7] = 1; mat[3][1] = mat[3][7] = 1; mat[4][1] = 1; mat[6][5] = 1; mat[7][1] = 1; mat[9][1] = mat[9][3] = mat[9][4] = mat[9][5] = mat[9][7] = 1; for(int i=0; i<10; i++) mat[8][i] = 1; mat[8][8] = 0; } const int N = 1010; int a , match ; bool vis ; vector<int> V ; bool dfs(int x){ for(int i=0; i<V[x].size(); i++){ int j=V[x][i]; if(vis[j]) continue; vis[j]=1; if(match[j]==-1 || dfs(match[j])){ match[j] = x; return 1; } } return 0; } int solve(int n){ memset(match,-1,sizeof(match)); int res = 0; for(int i=1; i<=n; i++){ memset(vis,0,sizeof(vis)); if(dfs(i)) res++; } return res; } int main(){ init(); int n; while(~scanf("%d", &n)){ for(int i=1; i<=n; i++){ V[i].clear(); scanf("%d", a+i); for(int j=1; j<i; j++){ if(mat[a[j]][a[i]]) V[j].push_back(i); } } printf("%d\n", n-solve(n)); } return 0; }
相关文章推荐
- POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】
- 杭电 hdu 1350 和 1960 Taxi Cab Scheme (二分匹配 + 最小路径覆盖)
- Ant Trip(区别于二分匹配中最小路径覆盖的一笔画问题)
- HDU 3861--The King’s Problem【scc缩点构图 && 二分匹配求最小路径覆盖】
- 【HDU1151】【二分匹配】【最小路径覆盖】【建模】
- POJ 3020 最小路径覆盖 = 顶点数-最大匹配数 二分匹配
- Poj 1548 Robots【最小路径覆盖---二分匹配】
- POJ-3020-Antenna Placement [二分匹配][最小路径覆盖]
- poj 2594 Treasure Exploration(最小路径覆盖/二分最大匹配)
- POJ1325二分匹配或者DINIC(最小路径覆盖)
- poj1422 Air Raid 二分匹配之最小路径覆盖
- poj 2594 Treasure Exploration(可重点最小路径覆盖)(二分匹配+Floyd求传递闭包)
- HDU 4160 最小路径覆盖 = 顶点数 - 最大匹配数 二分匹配
- POJ 1422 二分匹配 最小路径覆盖(邻接表实现)
- hdu1151(二分匹配最小路径覆盖)
- poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包
- poj3020 匈牙利算法+公式:二分无向图的最小路径覆盖 = 顶点数 - 最大二分匹配数 / 2
- 【二分匹配】 [网络流24题] 最小路径覆盖问题
- POJ 3020 Antenna Placement(二分匹配最小路径覆盖)
- 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 ->最大二分匹配)