POJ Air Raid 【DAG的最小不相交路径覆盖】

基于Python的信用卡欺诈检测机器学习案例报告 当今时代,在线支付已成为一种高效便捷的支付方式,我们可以突破时间和空间的限制,输入我们的信用卡各项信息就可以完成在线支付。但随之而来的是这种支付方式也具备一定的风险性,我们无法辨别对方是否是恶意套取我们资金的非法分子。当信用卡信息数据泄露导致金钱失窃并最终失去客户忠诚度和公司声誉时,组织、消费者、银行和商家都会面临风险。2017 年,未经授权的信用卡操作达到了惊人的 1670 万受害者。此外,据美国联邦贸易委员会 (FTC) 报告,2017 年信用卡欺诈索赔数量比上一年高出 40%。 阅读详情

传送门:http://poj.org/problem?id=1422

Air Raid

Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 9303 Accepted: 5570

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

 

题意概括:

 N个路口 M 条单向路,安排若干个士兵,这些士兵只会沿着当前所在结点路径走,问最少安排多少个士兵就可以把所有路口巡逻完毕。

解题思路:

拆点:

把原图的每个点V拆成VxVx和VyVy两个点,如果有一条有向边A->B,那么就加边Ax−>By。这样就得到了一个二分图。

最小路径覆盖=原图的结点数-新图的最大匹配数。

一开始每个点都是独立的为一条路径,总共有n条不相交路径。我们每次在二分图里找一条匹配边就相当于把两条路径合成了一条路径,也就相当于路径数减少了1。所以找到了几条匹配边,路径数就减少了多少。所以有最小路径覆盖=原图的结点数-新图的最大匹配数。

 

AC code(静态邻接表):

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstring>
 5 #define INF 0x3f3f3f3f
 6 using namespace std;
 7 const int MAXN = 150;
 8 struct Edge
 9 {
10     int v, nxt;
11 }edge[MAXN];
12 
13 int head[MAXN*MAXN], cnt;
14 int linker[MAXN];
15 bool used[MAXN];
16 int N, M;
17 
18 void init()
19 {
20     memset(head, -1, sizeof(head));
21     memset(linker, -1, sizeof(linker));
22     cnt = 0;
23 }
24 
25 void add(int from, int to)
26 {
27     edge[cnt].v = to;
28     edge[cnt].nxt = head[from];
29     head[from] = cnt++;
30 }
31 
32 bool Find(int x)
33 {
34     int v;
35     for(int i = head[x]; i != -1; i = edge[i].nxt){
36         v = edge[i].v;
37         if(used[v]) continue;
38         used[v] = true;
39         if(linker[v] == -1 || Find(linker[v])){
40             linker[v] = x;
41             return true;
42         }
43     }
44     return false;
45 }
46 
47 int main()
48 {
49     int T_case, u, v, ans;
50     scanf("%d", &T_case);
51     while(T_case--){
52         init();
53         scanf("%d %d", &N, &M);
54         while(M--){
55             scanf("%d%d", &u, &v);
56             add(u, v);
57         }
58         ans = 0;
59         for(int i = 1; i <= N; i++){
60             memset(used, 0, sizeof(used));
61             if(Find(i)) ans++;
62         }
63         printf("%d\n", N-ans);
64     }
65     return 0;
66 }
View Code

 

Spring Boot Admin 完整教程 SpringBootAdmin是一个用于管理和监控SpringBoot应用的Web工具,提供健康检查、性能指标、日志管理等核心功能。系统由AdminServer(管理服务器)和AdminClient(客户端)组成,通过Actuator端点收集数据。配置需添加Maven/Gradle依赖,通过@EnableAdminServer注解启动服务端,客户端需配置注册信息。支持UI自定义、安全认证(基本/OAuth2)、多种通知方式(邮件/Slack)及与Eureka/Consul等服务发现的集成。最佳实践包括分层监 阅读详情

相关推荐

别再死记硬背GNN公式了!用PyTorch Geometric从零实现一个GraphSAGE(附完整代码)

本文通过PyTorch Geometric从零实现GraphSAGE模型,深入解析图神经网络的核心原理与实战应用。文章提供完整代码示例,涵盖环境配置、邻居采样、信息聚合等关键步骤,帮助开发者掌握图表示学习技术,避免陷入公式推导的困境。适合希望将GNN应用于实际项目的中级开发者和学生。

weixin_42530570的博客 348

有向无环图(DAG)的最小路径覆盖

DAG的最小路径覆盖 定义:在一个有向图中,找出最少的路径,使得这些路径经过了所有的点。 最小路径覆盖分为最小不相交路径覆盖和最小可相交路径覆盖。 最小不相交路径覆盖:每一条路径经过的顶点各不相同。如图,其最小路径覆盖数为3。即1->3>4,2,5。 最小可相交路径覆盖:每一条路径经过的顶点可以相同。如果其最小路径覆盖数为2。即1->3->4,2->...

weixin_30877181的博客 390

SIPVicious实战指南:从零开始掌握VoIP渗透测试(Kali Linux环境)

本文为SIPVicious实战指南,详细介绍了在Kali Linux环境下进行VoIP渗透测试的完整流程。从环境准备与工具安装开始,逐步讲解如何使用svmap扫描SIP服务器、svwar枚举PBX分机号,以及svcrack进行密码安全测试,并整合svreport生成报告。旨在帮助安全从业者从零开始,系统掌握这套经典开源工具,在授权范围内有效评估VoIP系统的安全性。

weixin_29327977的博客 541

二部图总结

今天总结一下二部图,那么首先谈一下二部图的用处,首先谈一下二部图的最大匹配一下是代码模型#include #include #include #define Max 100 bool match[Max][Max]; int pre[Max]; bool vi[Max]; int find(int x); int n,m,k; int main() { while(

小小小小杜 1915

蜗牛星际+OpenWrt实战:双网口变AP模式,让所有设备同网段互通

本文详细介绍了如何将蜗牛星际双网口小主机刷入OpenWrt系统,并将其配置为AP模式,实现与主路由同网段的无缝桥接。通过关闭DHCP、桥接物理网口等核心步骤,解决家庭网络设备割裂问题,让所有设备在同一局域网内高效互通,特别适合追求网络简洁和厌恶多级NAT的技术爱好者。

zero1的博客 962

利用Langchain生成合成数据的实践指南

合成数据是相对于从真实世界事件中收集的数据而言的人工生成的数据。它用于模拟真实数据,同时避免隐私泄露或遇到真实数据中的局限性。:尽管合成数据有诸多优点,但应谨慎使用,因为它可能无法捕捉真实世界的复杂性。

eahba的博客 398

最小路径覆盖(匈牙利算法)

最小路径算法解决以下问题:对于一个DAG,找到最少的路径,覆盖所有顶点。按路径可否相交分为两类。 首先是路径不相交的最小覆盖: 我们可以把每个顶点分为出点和入点,这时每种路径安排都是一个二分图P',问题转化为了求该二分图的最大匹配:如果在P'中增加一条匹配边pi'-->pj',那么在图P的路径覆盖中就存在一条由pi连接pj的边,也就是说pi与pj 在一条路径上,于是路径覆盖数就可以减少一...

rgndao的博客 1163

Silvaco Atlas新手入门:从安装到第一个半导体器件仿真(附DeckBuild配置)

本文为Silvaco Atlas新手提供了一份从软件安装、DeckBuild环境配置到完成第一个半导体器件仿真的实战指南。通过构建一个经典的PN结二极管案例,详细讲解了Atlas仿真语句的语法、核心命令顺序以及结果调试与可视化方法,帮助初学者快速上手并理解TCAD仿真流程。

sql99的博客 333

【网络流二十四题 最小路径覆盖问题】【DAG 最小路径覆盖->最大流】

【网络流二十四题 最小路径覆盖问题】【DAG 最小路径覆盖->最大流】

Kumii 631

【Microchip】微芯 MPLAB® X IDE开发环境新建项目(点亮1颗LED灯)(常用右键菜单快捷键)

1.新建项目2. 选择芯片型号和调试器3.选择编译器4.项目命名和选择文件路径5.新建成功,给项目添加main.c7.将新建的mainXC16.c文件添加进项目6000000UL这三个就是。

Naiva的博客 453

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 675

有向无环图(DAG)的最小路径覆盖(最小不相交、最小相交)

DAG的最小路径覆盖 定义: 在一个有向图中,找出最少的路径,使得这些路径经过了所有的点。 最小路径覆盖分为最小不相交路径覆盖和最小可相交路径覆盖。 最小不相交路径覆盖: 每一条路径经过的顶点各不相同。如图,其最小路径覆盖数为3。即1->3>4,2,5。 最小可相交路径覆盖: 每一条路径经过的顶点可以相同。如果其最小路径覆盖数为2。即1->3->4,2->3>5。 特别的,每个点自己也可以称为是路径覆盖,只不过路径的长度是0。 DAG的最小不相交路径覆盖: 算法: 把原

dajiangyou123456的博客 1614

太美了!现代女主jk海军风穿搭四视图

哪个女孩子初高中的时候不买几套JK衣服啊,穿上完全是青春女孩。那还愣着干啥,不得也给你的漫剧女主也穿上!直接就是分享三套JK穿搭,红棕双麻花辫配经典水手服,是那种乖乖巧巧的元气学妹;粉色羊毛卷双马尾,搭配蝴蝶结和小挎包甜度直接拉满;还有灰棕色侧麻花辫,浅蓝上衣配黑色百褶裙,温柔里又带点小酷。下面把这三套角色的完整提示词分享出来,喜欢哪套就拿去参考,改改发型和配色,还能继续解锁新角色!

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 57

poj 1422Air Raid(DAG最小不相交路径点覆盖)

题意:给你一个DAG图,然后问你需要放几个人到节点上可以走完所有点。 思路:DAG最小不相交点覆盖模板题。 定理: DAG图G的最小路径点覆盖包含的路径条数,等于n 减去拆点二分图G2的最大匹配数。 AC Code: #include<iostream> #include<cstring> #include<queue> #include<m...

一身清贫怎敢入繁华 382

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

最小路径覆盖 poj1422 Air Raid

传送门:点击打开链接 题意:给一个DAG模型,要求最少的不相交的路径覆盖所有的点,即最小路径覆盖。 思路:最小路径覆盖通常把点拆成入点和出点,然后得到最大匹配数,答案就等于原点个数-最大匹配数 用二分图求最小路径覆盖的前提是,只能是DAG模型,不能有环! #include #include #include #include #include #include #include #incl

qwb的博客 867

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

POJ1422 Air Raid 【DAG最小路径覆盖】

Air Raid Time Limit:1000MS Memory Limit:10000K Total Submissions:6763 Accepted:4034 Description Consider a town where all the streets are one-way a...

aofan9566的博客 145

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

POJ1422-Air Raid-二分图-DAG最小路径覆盖

题目地址 http://poj.org/problem?id=1422 二分图基础知识:http://www.cnblogs.com/HITLJR/p/5782110.html 模板题没有思维含量,但是二分图和DAG最小路径覆盖的关系,需要仔细想明白。 代码 1 #include <iostream> 2 #include <cstring>...

bandi8620的博客 181

POJ 1422 Air Raid(DAG的最小路径覆盖,模板题)

DAG的最小路径覆盖,模板题 题目意思: 有n个点,m条边的有向无环图,每个点放一名士兵,然后士兵沿着图走,直到不能走 为止, 每条只能由一名士兵走过,问最少需要多少士兵。 本题要点: 1、图很小,可以用邻接矩阵来存图。 2、有向无环图,写成对应的二分图: 当点x -> y, 看成左部节点x 指向右部节点 y + n, 左部节点的范围 1 ~ n, 右部节点范围 n + 1 ~ 2 * n 3、 最小路径覆盖 = 点数 - 二分图最大匹配。 #include <cstdio> #inclu

qq_38232157的博客 152

POJ1422 Air Raid(最小路径覆盖)

传送门 【题目分析】 补一补老早以前的坑。。。。 题意很简单,给出一个DAG,问用最少路径覆盖DAG数量。 直接拆点跑最大流,一个匹配表示可以减少一条路径,最后用n-最大匹配即可。 【代码~】 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;queue&gt; us...

Michael_GLF的博客 229

POJ 1422 Air Raid(DAG最小路径覆盖)

POJ 1422 Air Raid(DAG最小路径覆盖) http://poj.org/problem?id=1422 题意:        城市里通过交点->交点(有向)标示一条街道(不存在回路)。问空袭时,需要如何降下最少的伞兵(放到交点路口上),使得伞兵能在不重复走同样交点的条件下,所有的伞兵遍历完整个城市的交叉路口。分析:        其实每个伞兵走的就是一条有向的简单路径.我们

code 1139

【POJ 1151】Air Raid

【POJ 1151】Air Raid DAG图(无回路有向图)的最小路径覆盖问题

ACMer' 865

poj 1422 Air Raid(最小路径覆盖 + 二分图最大匹配)

http://poj.org/problem?id=1422 题意:在一个有向无环图中,从一些顶点出发,能遍历到图上所有点,要求初始选择的顶点数最少且顶点不重复遍历。 思路: 如果从某个顶点开始遍历的过程看成是路径的选择,那么问题就转化为在有向无环图中找最少的不想交的简单路径,这些路径覆盖图中的所有顶点。可见是关于最小路径覆盖的问题。 在有向无环图中,最小路径覆盖数  =

2129

POJ1422 Air Raid(二分图)

POJ 1422http://poj.org/problem?id=1422 Air Raid Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9821 Accepted: 5872 Description Consider a town where all the streets are one-way and e...

Sensente的博客 277

POJ 1422 Air Raid(匈牙利算法—最小路径覆盖)

题目链接:POJ 1422 Air Raid geiyigeyouxia

fobdddf的专栏 799
上一篇: 二分图最大匹配 匈牙利算法
下一篇: POJ Treasure Exploration 【DAG交叉最小路径覆盖】
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值