首页 > 其他分享 >fds

fds

时间:2023-07-13 11:34:31浏览次数:27  
标签:p2 匹配 个点 int 左边 fds maxn

一、二分图匹配

给出一张二分图,请求出最大匹配数量

匈牙利算法:

让左边的与右边的

 

#include <bits/stdc++.h>
#define maxn 1005
#define icn cin 
#define itn int
using namespace std;
//左边的每个人都尝试去和右边的人匹配 
bool z[maxn][maxn];//z[i][j] 代表左边第i个点和右边第j个点能不能匹配 
int dist[maxn];
int n,m;
bool vis[maxn]; //vis[i] 代表右边第i个点在这一轮中有没有被请求匹配 
//左边有n 个点 右边有m个点
int k;//边数 
long long ans = 0; 
int reault[maxn];//result[i] 代表右边第i个点和左边第result[i]个点匹配 
bool dfs(int i){//让左边第i个点尝试  
    for(int j = 1; j <= m; j++)//让左边额第i个点和右边的第j个点尝试匹配
        if(z[i][j] && !vis[j]){
            vis[j] = true;//有点匹配 
            if(!result[j] || dfs(result[j])){
                result[j] = i;
                return true;
            }
        }
    return false;
}
int main(){
    ios::sync_with_stdio(false);
    cin >> n >> m;
    for(int i = 1; i <= k; i++){
        int p1,p2;
        cin >> p1 >> p2;
        z[p1][p2] = true;
    }
    for(int i = 1; i <= n; i++){
        memset(vis,false,sizeof(vis));
        if(dfs(i)) ans ++;
    }
    cout << ans << '\n';
    return 0;
    //O(n^3) 
}

 

优化:

#include<bits/stdc++.h>
#define ll long long
#define itn int

using namespace std;

const int maxn=1005;
int n,m,k;
int ans;
vector<int> z[maxn];
//z[i][j]代表左边第i个点第j个条边连向谁 
//n代表左边有n个点
//m代表右边有m个点 
bool vis[maxn];
//vis[i]代表右边第i个点在这一轮中有没有被请求匹配
int result[maxn];
//result[i] 代表右边第i个点和左边第result[i]个点匹配 

void add_edge(int p1,int p2)
{
    z[p1].push_back(p2);
}

inline bool dfs(int i)
{
    //让左边第i个点尝试匹配
    //返回是否匹配成功
    for(int k=0;k<z[i].size();k++)
    {
        //让左边第i个点和右边第j个点匹配 
        int j=z[i][k];
        if(!vis[j])
        {
            vis[j]=true;
            if(!result[j]||dfs(result[j]))
            {
                //右边这个点j没有和任何点匹配
                result[j]=i;
                return true; 
            }
        }
    }
    return false;
    //枚举所有点都不可行 
}

int main(){
    cin>>n>>m>>k;
    for(int i=1;i<=k;i++)
    {
        int p1,p2;
        cin>>p1>>p2;
        add_edge(p1,p2);
    }
    for(int i=1;i<=n;i++)
    {
        memset(vis,false,sizeof(vis));
        if(dfs(i)) ans++;//左边第i个点匹配成功,增加答案数量 
    }
    cout<<ans;
    return 0;
}
 

 

标签:p2,匹配,个点,int,左边,fds,maxn
From: https://www.cnblogs.com/wan169961/p/17549952.html

相关文章

  • 对select()参数fdset的完整理解
    虽然写了很多代码,但select我就从没有完整理解过,要用时不过copypaste而已。惭愧!今天决定要对select()参数fdset有一个完整理解。Go!先上一段代码(代码1-1),这段代码做的事情是1.创建一个socket来listen请求2.调用select等待新请求、等待已有请求的数据收发状态READY3.当有新连接请求......
  • 集群版fastFDS安装配置
    在单机版的基础上搭建集群版一、主机规划主机名IP地址操作系统配置kht111192.168.2.111Centos7.8基础设施服务器2颗CPU2G内存50G硬盘kht112192.168.2.112Centos7.8基础设施服务器2颗CPU2G内存50G硬盘kht113192.168.2.113Centos7.8......
  • FastFDS中的配置文件
    1、client.conf#connecttimeoutinseconds#defaultvalueis30sconnect_timeout=30       #连接超时 #networktimeoutinseconds#defaultvalueis30snetwork_timeout=60       #网络超时 #thebasepathtostorelogfiles......
  • Ubuntu 22.04.1 LTS 安装FastFDS
    安装过程一波三折,差点被坑死!一、简单介绍1、FastFDS是什么?FastDFS是阿里余庆用C语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文......
  • FireDAC FDScript发生异常无法捕获的问题。
    今天在调试程序时发现,如下红色标识代码执行时发生了错误(ProjectABTAYServer.exeraisedexceptionclassEMSSQLNativeExceptionwithmessage'[FireDAC][Phys][ODBC][Microsoft][ODBCSQLServerDriver][SQLServer]INSERT语句中列的数目小于VALUES子句中指定的值的数目。V......
  • supervisor中的minfds及minprocs参数用途
    使用supervisor遇到的一个坑,为此还撕逼了一下午,先填了再说先来看看minfds及minprocs这两个参数在supervisor官方文档中的说明(官方文档地址http://www.supervisord.org/con......
  • fasfdasfdsa
    如果希望自己每次都可以顺利地解决无线不能上网的问题,需要具备哪些技能才可以做到呢?1、要分清我们常用的操作系统都有哪些?电脑硬件、键盘上的键都叫什么名称、如何区分、......
  • [nrf52][SDK17] FDS的GC操作
    本文介绍FDS库的GC操作。1.GC是什么在FDS的概念中,写入Flash的数据以Record的形式保存。Record的格式为:Flash只能以32-bit的字(Word)为单位进行写操作。RecordHeader包含三个......
  • [nrf52][SDK17] 弄懂FDS
    1.基础nRF52系列芯片都是Cortex-M4内核,芯片的Flash操作由NVMC(Non-volatilememorycontroller)管理,读写擦的机制相同:写:以Word(4字节)为单位进行Flash写操作。写入地址要Word......