【UVALive - 3126】Taxi Cab Scheme (二分图,最小路径覆盖)

题目大意:

有n个出车安排,一辆车能接到这个安排的条件是:1、这辆车第一次发车;2、这辆车接了上一个安排,回到这个安排的起点的时间正好是这个安排的前一分钟或者更早 

解题报告:

  建图然后跑最小路径覆盖。就是答案。注意搭边的条件不是光看距离,还要加上每个任务的起点到终点的时间。

AC代码:(116ms)

#include<bits/stdc++.h>using namespace std;
int n;
int a,b;
int line[1005][1005];
int nxt[1005];
bool used[1005];
struct Node {int x[3],y[3];int time;int dis;
} node[10005];
bool find(int x) {for(int i = 1; i<=n; i++) {if(line[x][i] == 1 && used[i] == 0) {used[i]=1;if(nxt[i] == 0 || find(nxt[i])) {nxt[i]=x;return 1;}}}return 0;
}
int main()
{int t;cin>>t;while(t--) {scanf("%d",&n);memset(line,0,sizeof line);memset(nxt,0,sizeof nxt);for(int i = 1; i<=n; i++) {scanf("%d:%d %d %d %d %d",&a,&b,&node[i].x[0],&node[i].y[0],&node[i].x[1],&node[i].y[1]);node[i].time = a*60+b;node[i].dis = abs(node[i].x[0]-node[i].x[1]) + abs(node[i].y[0] - node[i].y[1]);}for(int i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {//或者j=i+1都可以acif(node[i].dis + node[i].time + abs(node[j].x[0]-node[i].x[1]) + abs(node[j].y[0] - node[i].y[1]) < node[j].time) {line[i][j] = 1;}}}int ans = 0;for(int i = 1; i<=n; i++) {memset(used,0,sizeof used);if(find(i)) ans++;}printf("%d\n",n-ans);}return 0 ;
}

AC代码2:(26ms)

//邻接表会快多少?
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <vector>
using namespace std;const int N = 505;int t, n;struct People {int s, x1, y1, x2, y2;void read() {int h, m;scanf("%d:%d%d%d%d%d", &h, &m, &x1, &y1, &x2, &y2);s = h * 60 + m;}bool operator < (const People& c) const {return s < c.s;}
} p[N];vector<int> g[N];bool judge(People a, People b) {int tmp = a.s + abs(a.x2 - a.x1) + abs(a.y2 - a.y1) + abs(a.x2 - b.x1) + abs(a.y2 - b.y1);if (tmp < b.s) return true;return false;
}int match[N], vis[N];bool dfs(int u) {for (int i = 0; i < g[u].size(); i++) {int v = g[u][i];if (vis[v]) continue;vis[v] = 1;if (match[v] == -1 || dfs(match[v])) {match[v] = u;return true;}}return false;
}int hungary() {int ans = 0;memset(match, -1, sizeof(match));for (int i = 0; i < n; i++) {memset(vis, 0, sizeof(vis));if (dfs(i)) ans++;}return ans;
}int main() {scanf("%d", &t);while (t--) {scanf("%d", &n);for (int i = 0; i < n; i++) {g[i].clear();p[i].read();}sort(p, p + n);for (int i = 0; i < n; i++)for (int j = i + 1; j < n; j++) {if (judge(p[i], p[j]))g[i].push_back(j);}printf("%d\n", n - hungary());}return 0;
}

总结:

想想为什么 j=1或者j=i+1都可以AC????

20190504:因为你sort了,,这样j=1~i这一部分都没必要遍历了,因为肯定不符合题意。

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

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

相关文章

java await signal_Java中的await()/signal()用法

二、方法await()/signal()在JDK5.0以后&#xff0c;JAVA提供了新的更加健壮的线程处理机制&#xff0c;包括了同步、锁定、线程池等等&#xff0c;可以实现更小粒度上的控制。await()和signal()就是其中用来同步的两种方法&#xff0c;功能基本上和wait()/notify()相同&#xf…

【HDU - 1083 】Courses (二分图)

题干&#xff1a; Consider a group of N students and P courses. Each student visits zero, one or more than one courses. Your task is to determine whether it is possible to form a committee of exactly P students that satisfies simultaneously the conditions:…

java 主备切换_keepalived 实现 Java 服务的高可用(主备切换)

前言本文要说的是基于 keepalived 实现两台服务器之间的主备切换&#xff0c;从而实现 Java 服务的高可用。keepalived 的原理不多做介绍&#xff0c;自行搜索了解&#xff0c;keepalived 的安装部署请参考 keepalived 的安装及使用 。个人建议不要沉迷于 死扣 和 理解 原理&am…

【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)

题干&#xff1a; There are a group of students. Some of them may know each other, while others dont. For example, A and B know each other, B and C know each other. But this may not imply that A and C know each other. Now you are given all pairs of studen…

最长上升子序列 java_最长上升子序列 O(nlogn)解法 (java)

最长递增子序列问题&#xff1a;在一列数中寻找一些数&#xff0c;这些数满足&#xff1a;任意两个数a[i]和a[j]&#xff0c;若i 设dp[i]表示以i为结尾的最长递增子序列的长度&#xff0c;则状态转移方程为&#xff1a; dp[i] max{dp[j]1}, 1<j 这样简单的复杂度为O(n^2)&a…

C++关于引用的注意事项 总结知识点

对函数的引用&#xff1a; #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #def…

中介者模式java_图解Java设计模式之中介者模式

智能家庭项目1)智能家庭包括各种设备&#xff0c;闹钟、咖啡机、电视机、窗帘等2)主人要看电视时&#xff0c;各个设备可以协同工作&#xff0c;自动完成看电视的准备工作&#xff0c;比如流程为 &#xff1a;闹铃响起 - 》咖啡机开始做咖啡 -》窗帘自动落下 -》电视机开始播放…

python 自动驾驶线性识别路段

python视觉库 OpenCV:OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。它可以用于图像处理、对象识别、特征提取、图像分割等。 Matplotlib:Matplotlib是一个绘图库,可用于创建高质量的二维图表和绘图。它提供了类似于MATLAB的绘图接口,使用户可以…

【CodeForces - 202A】LLPS (思维,字符串)

题干&#xff1a; This problems actual name, "Lexicographically Largest Palindromic Subsequence" is too long to fit into the page headline. You are given string s consisting of lowercase English letters only. Find its lexicographically largest p…

elementui表格宽度适应内容_elementui表格中的列怎么实现自适应列宽

elementui表格中的列怎么实现自适应列宽发布时间&#xff1a;2020-12-28 14:58:04来源&#xff1a;亿速云阅读&#xff1a;53作者&#xff1a;Leah这期内容当中小编将会给大家带来有关elementui表格中的列怎么实现自适应列宽&#xff0c;文章内容丰富且以专业的角度为大家分析和…

【POJ - 2398】Toy Storage (计算几何,二分找位置,叉积,点和直线的位置关系)

题干&#xff1a; Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing with them. They gave Reza a rectangular box to put his toys in. Unfortunately, Reza is rebellious and obeys his parents by simply throwing …

【POJ - 1269 】Intersecting Lines (计算几何,直线间的位置关系)

题干&#xff1a; We all know that a pair of distinct points on a plane defines a line and that a pair of lines on a plane will intersect in one of three ways: 1) no intersection because they are parallel, 2) intersect in a line because they are on top of …

java servlet 转发和重定向_JavaWeb(一)Servlet中乱码解决与转发和重定向的区别

前言前面其实已经把Servlet中所有的内容都介绍完了&#xff0c;这篇讲补充一点乱码和重定向与转发之间的区别&#xff01;一、request请求参数出现乱码问题1.1、get请求1)乱码示例get请求的参数是在url后面提交过来的&#xff0c;也就是在请求行中。结果&#xff1a;Servlet_de…

【POJ - 3304 】Segments(计算几何,思想转化,直线和线段相交)

题干&#xff1a; Given n segments in the two dimensional space, write a program, which determines if there exists a line such that after projecting these segments on it, all projected segments have at least one point in common. Input Input begins with a…

java调用lingo_使用Lingo增强JMS

虽然activemqjencks的jms轻量级解决方案已经很好地在psa中work了&#xff0c;尤其spring的JmsTemplate使得代码更简单&#xff0c;但是还是存在问题。问题来自暑期做psa的时候&#xff0c;linke突然提出要求&#xff0c;需要MDP返回些处理信息&#xff0c;比如处理结果、异常&a…

jsk Star War (线段树维护区间最小最大值 + 二分)

Description 公元20XX年&#xff0c;人类与外星人之间的大战终于爆发。 现有一个人类军团&#xff0c;由n名士兵组成&#xff0c;第i个士兵的战斗力值对应一个非负整数ai (1 \leq i \leq n1≤i≤n)。 有一天&#xff0c;某个战力爆表的外星人NaN单独向地球人宣战&#xff0c…

java jsp导出pdf文件_JSP页面导出PDF格式文件

JSP页面导出PDF格式文件基本在前端页面可以全部完成添加下载链接的点击事件var downPdf document.getElementById("downLoad");downPdf.onclick function() {downPdf.parentNode.removeChild(downPdf);html2canvas(document.body, {onrendered:function(canvas) {v…

【51Nod - 1094】和为k的连续区间 (前缀和,二分查找)

题干&#xff1a; 一整数数列a1, a2, ... , an&#xff08;有正有负&#xff09;&#xff0c;以及另一个整数k&#xff0c;求一个区间i,ji,j&#xff0c;(1 < i < j < n)&#xff0c;使得aii ... ajj k。 Input 第1行&#xff1a;2个数N,K。N为数列的长度。K为需…

简述java的线程_Java多线程的简述

线程与进程进程&#xff1a;​ 是指一个内存中运行的应用程序&#xff0c;每个进程都有一个独立的内存空间&#xff0c;一个应用程序可以同时运行多个进程&#xff1b;进程也是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff1b;系统运行一个程序即是一个进程…

【POJ - 3253】Fence Repair(贪心,时光倒流)

题干&#xff1a; Description Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of wood, each having some integer length Li (1 ≤ Li ≤ 50,000) units. He t…