HDU 3435 KM A new Graph Game

和HDU 3488一样的,只不过要判断一下是否有解。

 

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <algorithm>
  5 #include <vector>
  6 using namespace std;
  7 
  8 const int maxn = 1000 + 10;
  9 const int INF = 0x3f3f3f3f;
 10 
 11 int n, m;
 12 
 13 int W[maxn][maxn], lft[maxn];
 14 int slack[maxn];
 15 int Lx[maxn], Ly[maxn];
 16 bool S[maxn], T[maxn];
 17 
 18 bool match(int u)
 19 {
 20     S[u] = true;
 21     for(int v = 1; v <= n; v++) if(!T[v])
 22     {
 23         int t = Lx[u] + Ly[v] - W[u][v];
 24         if(0 == t)
 25         {
 26             T[v] = true;
 27             if(!lft[v] || match(lft[v]))
 28             {
 29                 lft[v] = u;
 30                 return true;
 31             }
 32         }
 33         else slack[v] = min(slack[v], t);
 34     }
 35 
 36     return false;
 37 }
 38 
 39 void update()
 40 {
 41     int a = INF;
 42     for(int i = 1; i <= n; i++) if(!T[i]) a =  min(a, slack[i]);
 43     for(int i = 1; i <= n; i++)
 44     {
 45         if(S[i]) Lx[i] -= a;
 46 
 47         if(T[i]) Ly[i] += a;
 48         else  slack[i] -= a;
 49     }
 50 }
 51 
 52 void KM()
 53 {
 54     memset(Ly, 0, sizeof(Ly));
 55     memset(lft, 0, sizeof(lft));
 56     for(int i = 1; i <= n; i++) Lx[i] = -INF;
 57     for(int i = 1; i <= n; i++)
 58         for(int j = 1; j <= n; j++) Lx[i] = max(Lx[i], W[i][j]);
 59 
 60     for(int i = 1; i <= n; i++)
 61     {
 62         memset(slack, 0x3f, sizeof(slack));
 63         for(;;)
 64         {
 65             memset(S, false, sizeof(S));
 66             memset(T, false, sizeof(T));
 67             if(match(i)) break;
 68             update();
 69         }
 70     }
 71 }
 72 
 73 int main()
 74 {
 75     int T; scanf("%d", &T);
 76     for(int kase = 1; kase <= T; kase++)
 77     {
 78         scanf("%d%d", &n, &m);
 79         for(int i = 1; i <= n; i++)
 80             for(int j = 1; j <= n; j++)
 81                 W[i][j] = -INF;
 82         for(int i = 0; i < m; i++)
 83         {
 84             int u, v, d; scanf("%d%d%d", &u, &v, &d);
 85             if(W[u][v] < -d) W[u][v] = W[v][u] = -d;
 86         }
 87 
 88         KM();
 89 
 90         bool ok = true;
 91         int ans = 0;
 92         for(int i = 1; i <= n; i++)
 93         {
 94             if(W[lft[i]][i] == -INF) { ok = false; break; }
 95             ans += W[lft[i]][i];
 96         }
 97         printf("Case %d: ", kase);
 98         if(!ok) puts("NO");
 99         else printf("%d\n", -ans);
100     }
101 
102     return 0;
103 }
代码君

 

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4782871.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux安全pdf,linux系统安全加固.pdf

通用 linux 系统安全加固手册系统安全加固手册1 帐户安全配置要求1 帐户安全配置要求1.1 创建/etc/shadow 影子口令文件1.1 创建/etc/shadow 影子口令文件配置项名 设置影子口令模式称执行&#xff1a;检查方法 #more /etc/shadow查看是否存在该文件1、执行备份&#xff1a;#cp…

oracle之基本的过滤和排序数据之课后练习

7. WHERE 子句紧随 FROM 子句8. 查询 last_name 为 King 的员工信息错误1: King 没有加上 单引号select first_name, last_name from employees where last_name King错误2: 在单引号中的值区分大小写select first_name, last_name from employees where last_name king正确s…

获得经纬度

//导入百度地图 1 private void initBaiDuInfo() {2 mLocationClient new LocationClient(getApplicationContext());3 setLocationOption();4 mLocationClient.registerLocationListener(myListener);5 mLocationClient.start();6 }7 8 …

linux qt getpid,[QTA] Android 动态注入原理分析

一、前言Android 的 UI 自动化测试可以通过注入式和非注入式分别实现&#xff0c;通过注入式可以更加方便地与应用进行交互。QTA 团队提供的 Android UI 自动化测试框架QT4A, 是通过动态注入的方式来获取被测应用的控件树信息等&#xff0c;从而达到自动化测试的目的。本文主要…

oracle之单行函数1

--全部小写 全部大写 全部首字母大写 select lower(ATGUIGUJAVA),UPPER(ATGUIGU Java),initcap(ATGUIGU Java) from dual -- 运行结果 --转换为小写查询 select * from employees where lower(last_name)king 运行结果 字符控制函数 --拼接 截取 长度 select CONCAT(h…

Canvas制作排序算法演示动画

tips: 形象化演示排序算法可以让初学者快速理解&#xff0c;比较好的例子&#xff1a;jun-lu的SortAnimate&#xff0c;旧金山大学的David Galles教授的算法演示课件。最近在看canvas&#xff0c;试着用jscanvas自己做了一个。 实现思路 获取输入字符串存入数组S[]中新建一个对…

oracle之单行函数2

--通用函数 --求公司员工的年薪 nvl 没有值代替 select employee_id,last_name,salary*12*(1nvl(commission_pct,0)) "annnal salary" from employees 运行结果 --输出department_id为空时候 没有部门 select last_name,nvl(to_char(department_id,99999),没有部门)…

linux vi命令 置顶,[置顶] Linux vi命令 创建文件

创建文件【vi】一、进入vi的命令vi filename :打开或新建文件&#xff0c;并将光标置于第一行首vi n filename &#xff1a;打开文件&#xff0c;并将光标置于第n行首vi filename &#xff1a;打开文件&#xff0c;并将光标置于最后一行首vi /pattern filename&#xff1a;打开…

Bootstrap中过渡效果(Transition)模态框插件的使用案例

通过使用模态框效果实现弹出框的登录效果&#xff1a; 效果图&#xff1a; <form id"formmodal" action"#"><h3>过渡效果&#xff08;Transition&#xff09;模态框插件的使用案例&#xff1a;</h3><!--按钮触发模态框--><but…

oracle之单行函数之课后练习

18. 打印出 "2009年10月14日 9:25:40" 格式的当前系统的日期和时间.select to_char(sysdate, YYYY"年"MM"月"DD"日" HH:MI:SS)from dual 注意: 使用双引号向日期中添加字符19. 格式化数字: 1234567.89 为 1,234,567.89select to_char(…

machine id linux,linux – 机器ID是uuid吗?

是的,现在.这在systemd手册中有所介绍. / etc / machine-id中的值最初不是有效的UUID,因为systemd人员最初没有编写用于生成版本4 UUID的正确代码.但此后已经修复.如果将许可证绑定到计算机ID,请注意它可以更改…> …如果有人删除/ etc / machine-id并在下次bootstrap中重新…

C++ 字符串指针与字符串数组

在做面试100题中第21题时&#xff0c;发现char *astr"abcdefghijk\0";和char astr[]{"abcdefghijk"};有点区别&#xff0c;以前一直以为是一样的&#xff0c;但是在该程序中采用字符串指针运行一直出错。后来在网上查查&#xff0c;果然发现大大的不同。 展…

oracle之单行函数之多表查询

--多表查询 select employees.employee_id,employees.department_id,departments.department_name from departments,employees where employees.department_iddepartments.department_id; 运行结果 --多表查询 其他情况 select e.employee_id,e.department_id,d.department…

hudson linux节点,在Linux下设置Hudson进行连续集成

在Linux下设置Hudson持续集成哈德森监督执行重复的工作&#xff0c;例如建立一个软件项目或由cron运行的工作。 本文介绍如何在Linux上进行设置。1准备1.创建目录结构如下&#xff1a;/var/hudson/|-[.ssh]|-[bin]| -[slave.jar]-[workspace]-[container]-[ci-tools]…

转: Jenkins+Gradle实现android开发持续集成、打包

http://my.oschina.net/uboluo/blog/157483 转载于:https://www.cnblogs.com/jhj117/p/4790079.html

VMware出现配置文件 .vmx 是由VMware产品创建,但该产品与此版 VMware workstation 不兼容,因此无法使用(VMware版本不兼容问题)

首先先修改.vmx文件 修改成你VM对应的版本号 然后修改.vmdk文件 同样修改成VM对应的版本号 接下来运行虚拟机会出现 不支持客户机操作系统"centos6-64", 请从"虚拟机设置"中"选项"选项卡上的"常规"页面选择一个客户机操作系统. 按照操…

parrot linux 安装grub,parrotsec 和 kali安装系统的时候出现“executing grub-install dummy”的解决方案...

在物理机的环境下安装系统出现点问题&#xff0c;弄了好一会才弄出解决方法1、parrot和kali安装的时候出现了无efi分区不能继续的问题&#xff0c;要知道我之前安装的时候一直都是\ ; 内存; \home三个分区搞定&#xff0c;然后我一直以为是我刻盘的问题&#xff0c;这里其实解决…

asp 下拉框二级联动

<script language "JavaScript"> //js开始 var aaa;//定义aaa变量 aaa0;//aaa赋0 bb new Array();//创建bb动态数组 <%count 0 定义bb数组下标变量 do while not rs.eof%>//循环所有记录 bb[<%count%>] new Array("<% trim(rs(&quo…

打不开磁盘“D:\CentOS7\CentOS7.vmdk”或它所依赖的某个快照磁盘。

这主要是非正常关闭虚拟机造成的&#xff0c;未能锁定文件 虚拟机为了防止有多虚拟机共用一个虚拟磁盘&#xff08;就是后 缀为.vmdk那个文件&#xff09;造成数据的丢失和性能的削弱&#xff0c;每次启动虚拟机时会给每个虚拟磁盘加一个磁盘锁&#xff08;也就是后缀为.lck的那…

qt c语言socket,c – Qt双向客户端服务器使用QTcpSocket和QTcpServer

默认情况下,QTcpSocket是异步的,因此当您调用connectToHost并在相同的上下文中写入时,将不会发送,因为套接字未连接.你应该改变你的“客户端”代码&#xff1a;void TopLevelComms::connect(){tcpSocket->connectToHost(hostAddress,QIODevice::ReadWrite);if(tcpSocket->…