ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

hdu1151Air Raid

2019-07-27 20:00:53  阅读:327  来源: 互联网

标签:town Raid hdu1151Air no int streets intersection data


原文链接:http://www.cnblogs.com/riasky/p/3455158.html

Air Raid

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2704    Accepted Submission(s): 1762

Problem Description Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town's streets you can never reach the same intersection i.e. the town's streets form no cycles.

With these assumptions your task is to write a program that finds the minimum number of paratroopers that can descend on the town and visit all the intersections of this town in such a way that more than one paratrooper visits no intersection. Each paratrooper lands at an intersection and can visit other intersections following the town streets. There are no restrictions about the starting intersection for each paratrooper.
  Input Your program should read sets of data. The first line of the input file contains the number of the data sets. Each data set specifies the structure of a town and has the format:

no_of_intersections
no_of_streets
S1 E1
S2 E2
......
Sno_of_streets Eno_of_streets

The first line of each data set contains a positive integer no_of_intersections (greater than 0 and less or equal to 120), which is the number of intersections in the town. The second line contains a positive integer no_of_streets, which is the number of streets in the town. The next no_of_streets lines, one for each street in the town, are randomly ordered and represent the town's streets. The line corresponding to street k (k <= no_of_streets) consists of two positive integers, separated by one blank: Sk (1 <= Sk <= no_of_intersections) - the number of the intersection that is the start of the street, and Ek (1 <= Ek <= no_of_intersections) - the number of the intersection that is the end of the street. Intersections are represented by integers from 1 to no_of_intersections.

There are no blank lines between consecutive sets of data. Input data are correct.
  Output The result of the program is on standard output. For each input data set the program prints on a single line, starting from the beginning of the line, one integer: the minimum number of paratroopers required to visit all the intersections in the town.
  Sample Input 2 4 3 3 4 1 3 2 3 3 3 1 3 1 2 2 3   Sample Output 2 1   Source Asia 2002, Dhaka (Bengal)   思路:在做hdu3861(The King's Problem)的时候,题目大意看一遍又一遍也不明白测试用例。 And the king must insure that in each state we can ether go from u to v or go from v to u between every pair of cities (u, v) without passing any city which belongs to other state.然后在参考网上题目解释才突然明白缩点之后求DAG上最小路径覆盖的,因为之前没涉及到这个问题,所有读题目都成问题,
看来“同志仍需努力啊”,我的小伙伴们都踢球去了,我毅然决定呆在computer lab研究一下,最小路径覆盖和二分匹配的关系。 这到题目算是二分匹配的入门题目了,然后每次选择未被覆盖的点,去找增广路,用DFS实现匈牙利算法。
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = 120+10;
vector<int> G[maxn];
int from[maxn], tot;
bool use[maxn];
int gn, gm;
//Accepted	1151	0MS	332K	1104 B	G++	Achiberx
bool match(int x) {
    for(int i = 0; i < (int)G[x].size(); i++) {
        int v = G[x][i];
        if(!use[v]) {
            use[v] = true;
            if(from[v] == -1 || match(from[v])) {
                from[v] = x;
                return true;
            }
        }
    }
    return false;
}


int hungary() {
    tot = 0;
    memset(from, -1, sizeof(from));
    for(int i = 1; i <= gn; i++) {
        memset(use, false, sizeof(use));
        if(match(i)) tot++;
    }
    return tot;
}

int main()
{
    int T, u, v;
    scanf("%d", &T);
    while(T--) {
        scanf("%d%d", &gn, &gm);
        for(int i = 0; i < maxn; i++) G[i].clear();
        for(int i = 1; i <= gm; i++) {
            scanf("%d%d", &u, &v);
            G[u].push_back(v);
        }
        int res = hungary();
        printf("%d\n", gn-res);
    }

}

转载于:https://www.cnblogs.com/riasky/p/3455158.html

标签:town,Raid,hdu1151Air,no,int,streets,intersection,data
来源: https://blog.csdn.net/weixin_30505043/article/details/97547223

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有