poj 2594 传递闭包+最大路径覆盖

由于路径可以有重复的点,所以需要将间接相连的点连接

复制代码
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<iostream>
 5 using namespace std;
 6 //顶点编号从0开始的
 7 const int MAXN=510;
 8 int uN,vN;//u,v数目
 9 int g[MAXN][MAXN];
10 int linker[MAXN];
11 bool used[MAXN];
12 bool dfs(int u)//从左边开始找增广路径
13 {
14     int v;
15     for(v=0;v<vN;v++)//这个顶点编号从0开始,若要从1开始需要修改
16       if(g[u][v]&&!used[v])
17       {
18           used[v]=true;
19           if(linker[v]==-1||dfs(linker[v]))
20           {//找增广路,反向
21               linker[v]=u;
22               return true;
23           }
24       }
25     return false;//这个不要忘了,经常忘记这句
26 }
27 int hungary()
28 {
29     int res=0;
30     int u;
31     memset(linker,-1,sizeof(linker));
32     for(u=0;u<uN;u++)
33     {
34         memset(used,0,sizeof(used));
35         if(dfs(u)) res++;
36     }
37     return res;
38 }
39 void floyed(int n)//求传递闭包
40 {
41     for(int i=0;i<n;i++)
42       for(int j=0;j<n;j++)
43       {
44           if(g[i][j]==0)
45           {
46               for(int k=0;k<n;k++)
47               {
48                   if(g[i][k]==1&&g[k][j]==1)
49                   {
50                       g[i][j]=1;
51                       break;
52                   }
53               }
54           }
55       }
56 }
57 int main()
58 {
59     int n,m;
60     int u,v;
61     while(scanf("%d%d",&n,&m))
62     {
63         if(n==0&&m==0)break;
64         uN=vN=n;
65         memset(g,0,sizeof(g));
66         while(m--)
67         {
68             scanf("%d%d",&u,&v);
69             u--;v--;
70             g[u][v]=1;
71         }
72         floyed(n);
73         printf("%d\n",n-hungary());
74     }
75     return 0;
76 }
复制代码

 

posted @   miao_a_miao  阅读(119)  评论(0编辑  收藏  举报
编辑推荐:
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!
点击右上角即可分享
微信分享提示