4000 POJ 1548 Robots(DAG最小路径覆盖)
2017-08-23 17:44
288 查看
POJ 1548 Robots(DAG最小路径覆盖)
http://poj.org/problem?id=1548
题意:
给出一个矩阵,派机器人从最左上点到最右下点走,并且每个机器人只能往下走或往右走,在矩阵中的一些格子中有含有一个‘G’,问最少需要多少机器人,才能把所有的G都走到
分析:
仔细分析一下,其实本题就是DAG的最小路径覆盖.
对于矩阵中的任意两个Gi和Gj. 如果i点的行和列号都<=j点的行和列号(即i在j的左上角),那么就有一条从i到j的边(表示从i点能走到j点). 那么最终肯定会形成一个DAG图.
现在的问题是我们需要在DAG中选择最少的简单路径来覆盖所有的节点. 这个问题就是DAG的最小路径覆盖 = n-二分图最大匹配数.
直接建图求匹配数即可.
AC代码:
http://poj.org/problem?id=1548
题意:
给出一个矩阵,派机器人从最左上点到最右下点走,并且每个机器人只能往下走或往右走,在矩阵中的一些格子中有含有一个‘G’,问最少需要多少机器人,才能把所有的G都走到
分析:
仔细分析一下,其实本题就是DAG的最小路径覆盖.
对于矩阵中的任意两个Gi和Gj. 如果i点的行和列号都<=j点的行和列号(即i在j的左上角),那么就有一条从i到j的边(表示从i点能走到j点). 那么最终肯定会形成一个DAG图.
现在的问题是我们需要在DAG中选择最少的简单路径来覆盖所有的节点. 这个问题就是DAG的最小路径覆盖 = n-二分图最大匹配数.
直接建图求匹配数即可.
AC代码:
#include<cstdio> #include<cstring> #include<vector> #include<iostream> using namespace std; const int maxn=600+5; #define inf 0x3f3f3f3f struct Max_Match { int n,m; vector<int>g[maxn]; bool vis[maxn]; int left[maxn]; void init(int n,int m) { this->n=n; this->m=m; for(int i=1;i<=n;i++) g[i].clear(); memset(left,-1,sizeof(left)); } bool match(int u) { for(int i=0;i<g[u].size();i++) { int v=g[u][i]; if(!vis[v]) { vis[v]=true; if(left[v]==-1 || match(left[v])) { left[v]=u; return true; } } } return false; } int solve() { int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(match(i)) ans++; } return ans; } }MM; struct node { int x,y; }s[maxn]; int main() { int n,m; while(~scanf("%d%d",&n,&m)) { if(n==-1&&m==-1)break; int tot=1; s[tot].x=n; s[tot++].y=m; while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0)break; s[tot].x=n; s[tot++].y=m; } tot--; MM.init(tot,tot); for(int i=1;i<=tot;i++) for(int j=1;j<=tot;j++) { if(i!=j&&s[i].x<=s[j].x&&s[i].y<=s[j].y) { MM.g[i].push_back(j); } } printf("%d\n",tot-MM.solve()); } return 0; }
相关文章推荐
- POJ 1548 Robots(DAG最小路径覆盖)
- POJ 1548 Robots(DAG最小路径覆盖)
- poj 1548 Robots(最小路径覆盖)
- poj 1548 Robots 最小路径覆盖
- poj-1548-Robots- 贪心+模拟 / 最小路径覆盖
- POJ 1548 Robots(最小路径覆盖)
- POJ-1548-Robots(最小路径覆盖)
- poj1548 Robots(最小路径覆盖/LIS)
- POJ 1548 Robots(最小路径覆盖)
- poj 1548 Robots 最小路径覆盖
- Poj 1548 Robots【最小路径覆盖---二分匹配】
- POJ - 1548 Robots 二分图 最小路径覆盖
- 【二分图+最小路径覆盖+建图难度】北大 poj 1548 Robots
- POJ1548 Robots【二分图最小路径覆盖】
- POJ 1422 Air Raid(DAG最小路径覆盖)
- UVA-1201 - Taxi Cab Scheme(POJ-2060)--DAG的最小路径覆盖
- 二分图最小路径覆盖 POJ 1548、1422、2594、3216
- poj1548最小路径覆盖
- POJ Treasure Exploration(DAG最小可相交路径覆盖)
- POJ 3216 Repairing Company(FLOYD+DAG最小路径覆盖)