Problem F
2013-04-29 21:11
309 查看
最小边覆盖
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <algorithm>
//#include "myAlgorithm.h"
#define MAX 10005
#define OFFENCE (1e9 + 5)
#define INF (1e8 + 5)
#define eps 1e-9
#define Rep(s, e) for( int i = s; i <= e; i++)
#define Cep(e, s) for( int j = e; j >= s; j --)
#define PI acos(-1.0)
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std;
int n;
int match[MAX];
bool v[MAX];
vector<vector<int> >adj;
void init() {
memset(match, -1, sizeof(match));
adj.assign(n + 2, vector<int>() );
}
bool find(int node) {
int len = adj[node].size(), pos;
Rep(0 , len - 1) {
pos = adj[node][i];
if(!v[pos]) {
v[pos] = 1;
int pre = match[pos];
if(pre == -1 || find(pre)) {
match[pos] = node;
return true;
}
}
}//cout<<endl;
return false;
}
struct Ride {
int hh, mm;
int sa, sb, ea, eb;
} r[MAX];
void make_adj() {
Rep(0, n -1) {
for(int j = i + 1; j < n; j++) {
int rt = abs(r[i].ea - r[j].sa) + abs(r[i].eb - r[j].sb);
int mt = (r[j].hh - r[i].hh) * 60 + r[j].mm - r[i].mm - rt - (abs(r[i].ea - r[i].sa) + abs(r[i].eb - r[i].sb));
if(mt > 0) {
adj[i].push_back(j);
// adj[j].push_back(i);
}
}
}
}
int main() {
int T;
cin>>T;
while(T--) {
cin>>n;
init();
Rep(0, n - 1) {
scanf(" %d:%d %d %d %d %d", &r[i].hh, &r[i].mm, &r[i].sa, &r[i].sb,&r[i].ea, &r[i].eb);
//cin>>r[i].hh>>tt>>r[i].mm>>r[i].sa>>r[i].sb>>r[i].ea>>r[i].eb;
//cout<<r[i].sa<<" "<<r[i].sb<<" "<<r[i].ea<<r[i].eb<<endl;
}
make_adj();
int fc = 0;
Rep(0, n -1) {
if(find(i))fc++;
memset(v, 0, sizeof(v));
}
cout<<n - fc<<endl;
}
return 0;
}
/**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <algorithm>
//#include "myAlgorithm.h"
#define MAX 10005
#define OFFENCE (1e9 + 5)
#define INF (1e8 + 5)
#define eps 1e-9
#define Rep(s, e) for( int i = s; i <= e; i++)
#define Cep(e, s) for( int j = e; j >= s; j --)
#define PI acos(-1.0)
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std;
int n;
int match[MAX];
bool v[MAX];
vector<vector<int> >adj;
void init() {
memset(match, -1, sizeof(match));
adj.assign(n + 2, vector<int>() );
}
bool find(int node) {
int len = adj[node].size(), pos;
Rep(0 , len - 1) {
pos = adj[node][i];
if(!v[pos]) {
v[pos] = 1;
int pre = match[pos];
if(pre == -1 || find(pre)) {
match[pos] = node;
return true;
}
}
}//cout<<endl;
return false;
}
struct Ride {
int hh, mm;
int sa, sb, ea, eb;
} r[MAX];
void make_adj() {
Rep(0, n -1) {
for(int j = i + 1; j < n; j++) {
int rt = abs(r[i].ea - r[j].sa) + abs(r[i].eb - r[j].sb);
int mt = (r[j].hh - r[i].hh) * 60 + r[j].mm - r[i].mm - rt - (abs(r[i].ea - r[i].sa) + abs(r[i].eb - r[i].sb));
if(mt > 0) {
adj[i].push_back(j);
// adj[j].push_back(i);
}
}
}
}
int main() {
int T;
cin>>T;
while(T--) {
cin>>n;
init();
Rep(0, n - 1) {
scanf(" %d:%d %d %d %d %d", &r[i].hh, &r[i].mm, &r[i].sa, &r[i].sb,&r[i].ea, &r[i].eb);
//cin>>r[i].hh>>tt>>r[i].mm>>r[i].sa>>r[i].sb>>r[i].ea>>r[i].eb;
//cout<<r[i].sa<<" "<<r[i].sb<<" "<<r[i].ea<<r[i].eb<<endl;
}
make_adj();
int fc = 0;
Rep(0, n -1) {
if(find(i))fc++;
memset(v, 0, sizeof(v));
}
cout<<n - fc<<endl;
}
return 0;
}
/**
*/
相关文章推荐
- Problem F: ZZY and his little friends
- 【NYIST】暑假训练赛 (一)----Problem F
- Problem f
- Problem F: 蚂蚁的最短行径
- NYOJ 多校联合训练 Problem F 不是匹配(思维)
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem F: qwb has a lot of Coins (博弈论)
- The Ninth Hunan Collegiate Programming Contest (2013) Problem F
- Problem F: 最右边的数字
- Problem F
- 动态规划——problem f
- CH5 Problem F: C语言习题5.13--趣味取小数
- [HDU-5976] [Problem F](逆元+二分优化+数学分析)
- 2012山东大学校赛,高年级组【Problem F 一字棋 】
- Problem F. √ (N im) -Gym 100345F-找规律+打表
- 贪心算法 Problem F 1005 花最少(数量)的纸币
- Problem F: The Nearest Same Chocolate
- 2270 Problem F 拼接海报
- 湖南中医药大学2017年集训队第四场选拔赛-Problem F: Virtual Friends
- 2680: Problem F
- CSU-ACM暑假集训基础组七夕专场 F - Problem F