题目链接:点击打开链接

题意:

给定n个人

每一个人的点权

以下n行i行表示第i个人能够获得哪些数(数字从1-n。且不能反复分配)

若这个人获得了数字则你能够获得他的权值。

要你能获得的权值和最大。

问:

输出每一个人应该获得哪个数字。若没有获得到数字则输出0.

思路:

KM,每一个人给每一个数字连一条边,边权是这个人的权值。

对于这个人不能获得的数字连一条边权为0的边。

#include <stdio.h>
#include <string.h>
#define M 410
#define inf 0x3f3f3f3fint n,nx,ny;
int link[M],lx[M],ly[M],slack[M], linkx[M];    //lx,ly为顶标。nx,ny分别为x点集y点集的个数
int visx[M],visy[M],w[M][M];int DFS(int x)
{visx[x] = 1;for (int y = 1;y <= ny;y ++){if (visy[y])continue;int t = lx[x] + ly[y] - w[x][y];if (t == 0)       //{visy[y] = 1;if (link[y] == -1||DFS(link[y])){link[y] = x;linkx[x] = y;return 1;}}else if (slack[y] > t)  //不在相等子图中slack 取最小的slack[y] = t;}return 0;
}
int KM()
{int i,j;memset (link,-1,sizeof(link));memset (ly,0,sizeof(ly));for (i = 1;i <= nx;i ++)            //lx初始化为与它关联边中最大的for (j = 1,lx[i] = -inf;j <= ny;j ++)if (w[i][j] > lx[i])lx[i] = w[i][j];for (int x = 1;x <= nx;x ++){for (i = 1;i <= ny;i ++)slack[i] = inf;while (1){memset (visx,0,sizeof(visx));memset (visy,0,sizeof(visy));if (DFS(x))     //若成功(找到了增广轨),则该点增广完毕。进入下一个点的增广break;  //若失败(没有找到增广轨),则须要改变一些点的标号,使得图中可行边的数量添加。

//方法为:将全部在增广轨中(就是在增广过程中遍历到)的X方点的标号全部减去一个常数d, //全部在增广轨中的Y方点的标号全部加上一个常数d int d = inf; for (i = 1;i <= ny;i ++) if (!visy[i]&&d > slack[i]) d = slack[i]; for (i = 1;i <= nx;i ++) if (visx[i]) lx[i] -= d; for (i = 1;i <= ny;i ++) //改动顶标后。要把全部不在交错树中的Y顶点的slack值都减去d if (visy[i]) ly[i] += d; else slack[i] -= d; } } int res = 0; for (i = 1;i <= ny;i ++) if (link[i] > -1) res += w[link[i]][i]; return res; } template <class T> inline bool rd(T &ret) { char c; int sgn; if(c=getchar(),c==EOF) return 0; while(c!='-'&&(c<'0'||c>'9')) c=getchar(); sgn=(c=='-')?-1:1; ret=(c=='-')?

0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); ret*=sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if(x>9) pt(x/10); putchar(x%10+'0'); } using namespace std; int a[401]; void build(){ for(int i = 1; i <= n; i++) rd(a[i]), a[i] = a[i]*a[i]; for(int i = 1, siz, u; i <= n; i++) { memset(w[i], 0, sizeof w[i]); rd(siz); while(siz--) { rd(u); w[i][u] = a[i]; } } nx = ny = n; KM(); } int main(){ while(rd(n)){ build(); for(int i = 1; i <= n; i++) { if(w[i][linkx[i]]) pt(linkx[i]); else putchar('0'); i == n?puts("") : putchar(' '); } } return 0; }

转载于:https://www.cnblogs.com/gavanwanggw/p/6920692.html

SGU 210 Acdream 1227 Beloved Sons KM相关推荐

  1. 史上最全的SGU题目分类

    由于SGU上神题遍地,特列此表,便于训练时分类训练. 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traffic Lights 最短路 104 Little Shop ...

  2. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

  3. R语言 CHAR 11

    时间序列预测 转化成时间格式后画预测图 残差注意相减长度 简单指数平滑预测模型 #模型 cpiforcast<-HoltWinters(table[,5],beta=FALSE,gamma=FA ...

  4. 基于在线地图的轨迹跟踪服务_论文推荐丨陆川伟,孙群,陈冰,等:车辆轨迹数据的道路学习提取法...

    <测绘学报> 构建与学术的桥梁 拉近与权威的距离 复制链接,关注<测绘学报>抖音! [测绘学报的个人主页]长按复制此条消息,长按复制打开抖音查看TA的更多作品##7NsBSyn ...

  5. SGU 252 Railway Communication(KM)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=252 题意:一个有向图.选择最少的路径覆盖所有点.在路径最少的情况下,使得所有路径经 ...

  6. 洛谷 - P4014 分配问题(费用流/KM)

    题目链接:点击查看 题目大意:给出n个工人和n个工作,每个人做每一个工作的效率都是不同的,问如何分配能让效率最低/最高 题目分析:最小费用最大流和最大费用最大流的模板题,直接套模板跑答案就行了,没有任 ...

  7. HDU - 3488 Tour(二分图最小权匹配+KM)

    题目链接:点击查看 题目大意:给出n个城市,再给出m条有向的道路,问若想以一个或多个环的形式遍历所有的城市一次,所需要的最小权值是多少 题目分析:刚拿到这个题目是有点懵的,因为不知道题目让求什么,其实 ...

  8. POJ - 2195 Going Home(二分图最小权匹配+KM+思维建边/最小费用最大流)

    题目链接:点击查看 题目大意:给出一个n*m的地图,现在有一定数量的小人要回到屋子里去,题目保证图中的小人和屋子的数量是一致的,小人回到小屋的距离是两个点坐标的曼哈顿距离,每个小屋只能容纳一个小人,现 ...

  9. 信息学奥赛一本通 1227:Ride to Office | OpenJudge NOI 4.6 2404:Ride to Office

    [题目链接] ybt 1227:Ride to Office OpenJudge NOI 4.6 2404:Ride to Office 原题是英文题,虽说两题题意相同,但一本通网站没有对该问题进行直 ...

最新文章

  1. Apple的LZF算法解析
  2. Exchange 2013 OWA搜索邮件失败问题处理
  3. schema.sql自动写入。由于版本问题。2.x之后。就不行了。·
  4. python学费多少-培训python学费多少?
  5. DataSnap 用TStream 传递大数据 返回流大小为-1的情况
  6. ArtRage中文版
  7. java file gettext_避免使用.properties文件GNU Gettext Java
  8. concat mysql sql注入_Mysql中用concat函数执行SQL注入查询的方法
  9. 使用layui实现表格制作
  10. 如何在 iPhone、iPad 和 Mac 上压缩照片?
  11. 二极管、稳压二极管、发光二极管电路测试
  12. 观后感 --《当幸福来敲门》和《赢在中国》
  13. 戴维斯计算机科学值得读吗,2018加州大学戴维斯分校计算机科学专业基本信息详细解读...
  14. 君不密则失臣,臣不密则失身,机事不密则害成
  15. 【PMP】项目生命周期和开发生命周期
  16. optaplanner学习笔记(二)OptPlanner求解步骤及配置
  17. 就业前景php,php的就业前景如何
  18. [工作积累] TAA Ghosting 的相关问题
  19. mac mysql.sock_Mac OS 下 mysql 找不到 mysql.sock 的解决过程
  20. 信息增益、信息增益率、Gini

热门文章

  1. java设计模式—工厂模式
  2. volatile 用处
  3. VS2010配置清单
  4. 基于Spring Security的认证方式_SpringBoot认识_Spring Security OAuth2.0认证授权---springcloud工作笔记121
  5. SpringCloud工作笔记044---SpringCloud分布式服务器配置要求_记录一下
  6. js技术要点---document.write()方法在IE浏览器和火狐浏览器下面的兼容性问题
  7. Android学习笔记---Android平台1.使用dom解析xml文件
  8. sytlengan2 代码解析
  9. resnet18 参数解读
  10. 英文操作系统(chcp:437)让Console输出UTF-8