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 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),没有部门)…

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

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

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…

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

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

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

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

【转】 代理模式

原文链接&#xff1a;http://layznet.iteye.com/blog/1182924一、代理概念 为某个对象提供一个代理&#xff0c;以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口&#xff0c;这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、…

Core Animation

关键字 1.Core Animation的核心类是CALayer,通过对其属性进行配置可以展现不同的外观&#xff0c;这些属性包括位置&#xff0c;尺寸&#xff0c;图片内容&#xff0c;背景色&#xff0c;边界&#xff0c;阴影&#xff0c;以及角半径。 CATextLayer *textLayer;textLayer [CAT…

oracle之单行函数之分组函数

--分组函数 select avg(salary),max(salary),min(salary),sum(salary) from employees 运行结果 --判断大小 select max(last_name),min(last_name),max(hire_date),min(hire_date) from employees 运行结果 --计数 select count(employee_id),count(last_name),count(hire_da…

RocketMQ初步应用架构理论

RocketMQ初步应用架构理论 写给RocketMQ架构应用入门&#xff0c;内容涉及它的设计机理以及推到出来的应用注意事项&#xff0c;入门人员请看。 稍微涉及技术细节&#xff0c;留以我设计中间件时参考&#xff0c;将来整理深度文档时会抽取走&#xff0c;入门人员可以无视。 以下…

oracle之单行函数之子查询

--睡得工资比abel高 select last_name,salary from employees where salary>(select salary from employees where last_nameAbel)运行结果 --返回job_id 与141号员工相同 salary比143号多 select last_name,job_id,salary from employees where job_id(select job_id from…

android模拟gps定位软件,gps定位模拟器下载最新版

卫星地图导航&#xff0c;从此出门想去哪里去哪里&#xff0c;再也不用因为不知道路线而烦忧&#xff01;它还能实时定位&#xff0c;快速找人、找车&#xff01;推荐&#xff01;使用前提&#xff1a;1、定位模拟器是基于Xposed安卓框架下的插件&#xff0c;因此安装定位模拟器…

oracle之创建和管理表

create table emp2 AS Select employee_id,last_name name,hire_date,salary from employees select * from emp2 --创建表 --白手起家 /* create table emp1(id number(10),name varchar(20),salary number(10,2),hire_date date ) */

LocalBroadcastManager 的使用

一、使用本地广播发送一条广播&#xff08;本例为自己发送自己接收&#xff0c;本地广播也可以是其他应用接收&#xff09;然后接收到广播时回调Receiver类中的回调方法onReceive&#xff08;&#xff09;在此方法中自定义发出通知 代码 1 package com.qf.broadcastreceiver06;…

android xml正方形,使用Android Constraintlayout创建一排均匀分布的正方形

我正在努力创建一个由均匀分布的正方形链组成的布局&#xff0c;这些正方形可以填充可用空间。使用Android Constraintlayout创建一排均匀分布的正方形我到底想要的布局&#xff0c;看起来像这样&#xff1a;的想法是&#xff0c;与不同的宽高比手机这个正方形成长一点点地使用…

oracle之数据处理

--创建表 create table emp3 as select employee_id,last_name,hire_date,salary from employees--查询表 select * from emp3--插入表 insert into emp3 values(1001,AA,sysdate,10000) 运行结果 插入对应三项 --空值用null代替 --复制表 insert into emp3(last_name,employe…

HDU 4635(强连通分量分解

题目:给出一个有向图,要求添加最多的边数,使得图仍然不强连通. 思路:首先这个图在添加边之后肯定变成了两个强连通分量,现在就看怎么分.然后我们可以注意到,原图进行强连通分量分解之后必然存在一些分量的出度或入度为0,最小的分量肯定在这些分量之中.那么找出这个分量就可以得…