珠宝静态网站模板2021年中国关键词
珠宝静态网站模板,2021年中国关键词,中小企业官方网站,999导航题目#xff1a;POJ 3041 Asteroids http://poj.org/problem?id3041 分析#xff1a; 把位置下标看出一条边#xff0c;这显然是一个二分图最小顶点覆盖的问题#xff0c;Hungary就好。 挑战#xff1a; 输出一组可行解。构造#xff0c;已知二分图的两个点集U和V#…题目POJ 3041 Asteroids http://poj.org/problem?id3041 分析 把位置下标看出一条边这显然是一个二分图最小顶点覆盖的问题Hungary就好。 挑战 输出一组可行解。构造已知二分图的两个点集U和Vs-U-V-t在最大匹配的残留网络里选从s出发能到达的V中的点 沿途可以到达的U集中的点的路径就都被覆盖了然后在选择U集合中无法到达的点。对于二分图中任意一条边其中必有一点属于U集合 所以前面选出的点集S是一个覆盖。并且S中V和U对应的匹配边是相斥的总数确实等于总匹配边数。更具体的可以想想U是怎么划分的。 如果最大匹配数记为M,最小点覆盖记为C。那么的构造还可以说明M≥C。又因为匹配边是平行的所以至少要M个点才能覆盖C≥M。这样 就得出了M C的结论。 Code /*********************************************************
* ------------------ *
* author AbyssalFish *
**********************************************************/
#includecstdio
#includeiostream
#includestring
#includecstring
#includequeue
#includevector
#includestack
#includevector
#includemap
#includeset
#includealgorithm
#includecmath
using namespace std;typedef long long ll;const int maxn 501, maxm 1e41;
int hd[maxn],to[maxm],nx[maxm],ec;
#define eachEage int i hd[u]; i; i nx[i]
void add(int u,int v)
{nx[ec] hd[u];to[ec] v;hd[u] ec;
}int link[maxn];
int vis[maxn], clk;bool dfs(int u)
{vis[u] clk;for(eachEage){int v to[i], w link[v];if(!w || (vis[w]!clk dfs(w))){link[v] u;return true;}}return false;
}//#define LOCAL
int main()
{
#ifdef LOCALfreopen(in.txt,r,stdin);
#endifint n,k; scanf(%d%d,n,k);for(int i 0; i k; i){int r, c;scanf(%d%d,r,c);add(r,c);}int ans 0;for(int i 1; i n; i){clk;if(dfs(i)) ans;}printf(%d\n, ans);return 0;
} 转载于:https://www.cnblogs.com/jerryRey/p/4947414.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87993.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!