hdu 2760 how many shortest path

2027年新疆职业院校技能大赛“网络系统管理”A模块网络构建真题 2027年新疆职业院校技能大赛“网络系统管理”A模块——网络构建真题,仅供学习使用。 阅读详情

 

 

一个写了2天的题目。。 都快写吐了。。 首先是构图的方法上 。。 开始想了各种构图的方法 都没有想对。。

最开始用floyd 然后跑了一遍最短路径, 求spath[i][t] == spath[j][t] + path[i][j] 的路 表示这条路是i到t最短路所用到的路。。

但是wa了。。 后来就开始到网上找 发现得用spath[s][t] = spath[s][i] + path[i][j] + spath[j][t] 来枚举 然后加入到网络流的网络中。。

但是还是各种wa 后来发现自己的网络流模板的汇点必须是最后的一个点。。 以后做gap优化的时候 是用最后一个点来标记路径的 应该改一下就可以改变汇点了

然后还是没有对。。 不知道是哪里错了 开始重写 重写了一遍交上去还是wa了 。。 就开始找别人的程序 自己生成数据 开始一个一个地对。。

发现是t0 == 0 和s0 == n-1的时候没有考虑,不过不考虑的话 交换邻接矩阵的时候就不对了。。

再交上去就对了 一共大约交了 20 多次 终于ac 泪奔了。。 自己弱的不行了。。

#include <cstdio>
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#pragma comment(linker, "/STACK:1024000000,1024000000")
const int MAXN=2000;

using namespace std;

const int inf = 0x7ffffff;

const int s = 0;
int path[MAXN][MAXN];
int spath[MAXN][MAXN];


struct edge{
       int v,next,w;
}edge[20005];

int head[2*MAXN],cnt;//for sap

void addedge(int u, int v, int w)
{
     edge[cnt].v = v;
     edge[cnt].w = w;
     edge[cnt].next = head[u];
     head[u] = cnt++;
     edge[cnt].v = u;
     edge[cnt].w = 0;
     edge[cnt].next = head[v];
     head[v] = cnt++;
}

int sap(int t)
{
    //cout << "here" << endl;
    int pre[2*MAXN],cur[2*MAXN],dis[2*MAXN],gap[2*MAXN]; //gap标记断层
    int flow = 0 , aug = inf ,u;
    bool flag;
    for (int i = 0 ; i <= t ; ++i)
    {
        cur[i] = head[i];
        gap[i] = dis[i] = 0;
    }
    gap[s] = t+1;
    u = pre[s] = s;
    while (dis[s] <= t)
    {
          flag = 0 ;
          for (int &j = cur[u] ; ~j ; j = edge[j].next)
          {
              int v = edge[j].v;
              if (edge[j].w > 0 && dis[u] == dis[v]+1)
              {
                   flag = 1;
                   if( edge[j].w < aug )aug = edge[j].w;
                   pre[v] = u;
                   u = v;
                   if (u == t)
                   {
                       flow += aug;
                       while (u != s)
                       {
                             u = pre[u];
                             edge[cur[u]].w -= aug;
                             edge[cur[u]^1].w += aug;
                       }
                       aug = inf;
                   }
                   break;
              }
          }
          if ( flag )continue ;
          int mindis = t+1;
          for (int j = head[u]; ~j ; j = edge[j].next)
          {
              int v = edge[j].v;
              if (edge[j].w > 0 && dis[v] < mindis)
              {
                 mindis = dis[v];
                 cur[u] = j;
              }
          }
          if(--gap[dis[u]] == 0)break;
          gap[ dis[u] = mindis+1 ]++;
          u = pre[u];
    }
    return flow;
}

void swap ( int &a , int & b)
{
    int temp = a;
    a = b;
    b = temp;
}

void init ()
{
     memset (head , -1 , sizeof(head));
     cnt=0;
}

void floyd ( int n  )
{
    for ( int k = 0 ; k < n ; k ++ )
        for ( int i = 0 ; i < n; i ++)
            for ( int j = 0 ; j < n; j ++ )
            {
                spath[i][j] = min ( spath[i][j] , spath[i][k] + spath[k][j] );
            }
}

int main()
{
    int n;
    //freopen("out.txt" , "r" , stdin );
    //freopen("myrun.txt" , "w" ,stdout );
    while ( cin >> n )
    {
        init();

        for ( int i =0 ; i < n; i ++ )
            for ( int j = 0 ; j < n; j ++ )
            {
                cin >> path[i][j];
                if ( path[i][j] == -1 )
                    path[i][j] = inf;
                if ( i == j )
                    path[i][j] = 0;
            }
        int s0 , t0 ;
        cin >> s0 >> t0;
        if ( t0 == 0 )
        {
            for ( int i = 0 ; i < n; i ++ )
                swap( path[i][t0] , path[i][s0] );
            for ( int i = 0 ; i < n ; i ++ )
                swap( path[s0][i] , path[t0][i] );
            t0 = s0;
            s0 = 0;
            if ( t0 != 0 )
            {
                for ( int i = 0 ; i < n; i ++ )
                    swap ( path[i][t0] , path[i][n-1] );
                for ( int i = 0 ; i < n; i ++ )
                    swap ( path[t0][i] , path[n-1][i]);
            }
        }
        if ( s0 == n-1 )
        {
            for ( int i = 0 ; i < n; i ++ )
                swap( path[i][t0] , path[i][s0] );
            for ( int i = 0 ; i < n ; i ++ )
                swap( path[s0][i] , path[t0][i] );

            s0 = t0;
            t0 = n-1 ;

            if ( s0 != 0 )
            {
                for ( int i = 0 ; i < n; i ++ )
                    swap( path[i][0] , path[i][s0] );
                for ( int i = 0 ; i < n ; i ++ )
                    swap( path[0][i] , path[s0][i] );
            }
        }
        else
        {
            if ( s0 != 0 )
            {
                for ( int i = 0 ; i < n; i ++ )
                    swap( path[i][0] , path[i][s0] );
                for ( int i = 0 ; i < n ; i ++ )
                    swap( path[0][i] , path[s0][i] );
            }
            if ( t0 != 0 )
            {
                for ( int i = 0 ; i < n; i ++ )
                    swap ( path[i][t0] , path[i][n-1] );
                for ( int i = 0 ; i < n; i ++ )
                    swap ( path[t0][i] , path[n-1][i]);
            }
        }
        for ( int i = 0 ; i < n; i ++ )
            for ( int j = 0; j < n; j ++ )
                spath[i][j] = path[i][j];
        floyd ( n );
//        for ( int i = 0 ; i < n ; i ++ )
//            for ( int j = 0 ; j < n ; j++ )
//                cout << "spath[" << i << "][" << j << "] = " << spath[i][j] << endl;
        //cout << "here" << endl;
        //cout << spath[0][t0] << endl;
        //t0 = n-1;
        for ( int i = 0 ; i < n; i ++)
            for ( int j = 0 ; j < n; j ++)
                if ( spath[0][n-1] == spath[0][i] + path[i][j] + spath[j][n-1] && i != j && spath[0][i] < inf && spath[j][n-1] < inf && path[i][j] < inf )
                {
//                    cout << "here" << endl;
                    addedge ( i , j , 1 );
                    //cout << i << "   " << j << endl;
                }
        //cout << "here" << endl;
        //cout << t0 << endl;
        if ( s0 == t0 )
            cout << "inf" << endl;
        else
            cout << sap( n-1 ) << endl;
    }
    return 0;
}

SKILL实现电路virtuoso原理图schematic中引脚pin的net自动打上pin label 阅读详情

相关推荐

AD9361 RSSI配置实战:从寄存器到精准功率测量的避坑指南

本文详细解析了AD9361芯片的RSSI配置实战,从寄存器设置到精准功率测量的全流程避坑指南。通过优化模式选择、测量持续时间及高级参数配置,实现高精度信号强度测量,并分享实际项目中的校准流程与性能优化技巧,帮助工程师提升射频接收链路的测量精度。

weixin_38166557的博客 442

ZOJ 2760 How Many Shortest Path(最短路径计数)

How Many Shortest Path Time Limit: 10 Seconds      Memory Limit: 32768 KB Given a weighted directed graph, we define the shortest path as the path who has the smallest length among all the pat

yasolx的博客 806

机场数据治理系列介绍(1):机场行业数据中台中的数据管理顶层设计方案

民航机场行业的数据中台中,有关数据管理顶层设计方案需要结合机场行业的业务特点和技术需求进行具体的设计,今日我们简要考量设计提供一个参考方案:

机场信息系统研究员的专栏 1604

zoj 2760 How Many Shortest Path 【最短路 + 最大流】 【求边不重复最短路径条数】

How Many Shortest Path Time Limit: 10 Seconds      Memory Limit: 32768 KB Given a weighted directed graph, we define the shortest path as the path who has the smallest length among all the pa

世界很大 1256

Agentic AI上下文工程架构终极指南:全面解决智能体理解问题

在开始架构设计前,我们需要先明确两个核心概念——Agentic AI和上下文工程。Agentic AI(智能体AI)是具备自主目标、环境交互、任务分解能力的AI系统。自主性:不需要人类逐步指令,能自己规划任务(比如“帮我订机票”→自动分解为“查航班→选座位→填信息→支付”);动态性:能根据环境变化调整行为(比如订机票时发现航班延误,自动改签到下一班);连续性:能记住历史交互(比如“上次你说喜欢靠窗位,这次帮你预留了”)。

AI开发架构师 1116

Windows电脑如何用MobaXterm连接宇树G1机器人?保姆级SSH配置指南

本文提供了一份详细的保姆级教程,指导Windows用户使用MobaXterm通过SSH连接宇树G1机器人。内容涵盖从物理网络配置、MobaXterm安装与SSH会话创建,到文件传输、X11转发等高级功能,并包含常见问题排查与安全加固建议,帮助开发者快速建立稳定可靠的远程开发连接。

purple的博客 878

2018.10.10【ZOJ2760】How Many Shortest Path(最短路)(网络流)

传送门 解析: 题意简述: 给出一个有向图,问从SSS到TTT的边不相交的最短路有多少条。 思路: 首先肯定要求最短路。 然后这是一个匹配问题。 我们考虑用网络流来完成。 匹配问题的一般套路就是将需要匹配的东西在流网络中用一条边串起来,设容量为1,求最大流就是匹配的数量了。 那么这道题中,什么是合法可匹配的东西? 由于我们已经求了最短路了...

anlongyi8087的博客 163

自制非接触式静电探测仪:从振动电容原理到微弱信号检测实践

微弱信号检测是电子测量领域的核心挑战之一,尤其在需要避免物理接触或防止干扰的场景中。其基本原理在于将难以直接获取的微小物理量(如电流、电压)通过传感器转换为电信号,再经过放大、滤波等处理进行提取。锁相放大技术是解决这一问题的关键手段,它利用参考信号与目标信号的同步性,从强噪声背景中恢复出有效信息,极大提升了信噪比和测量灵敏度。这项技术的工程价值在于实现了对纳安级电流、微伏级电压等高难度参数的可靠测量。在静电防护、材料表面电位分析、生物电信号采集等应用场景中,非接触式测量需求广泛。本文聚焦的基于振动电容原理的

weixin_32349093的博客 273

zoj How Many Shortest Path

How Many Shortest Path   题目:  给出一张图,求解最短路有几条。处理特别BT,还有就是要特别处理map[i][i] = 0,数据有不等于0的情况! 居然脑残到了些错floyd!!!!!!14次wrong!!!!!!!!   算法:   先最短路处理,把在最短路上的边添加上。既是,dist[s][i] + map[i][j] == dist[s][j]表示从起

YouthDance 805

Python自动化办公:5分钟搞定钉钉群文件自动发送(附完整代码)

本文详细介绍了如何利用Python实现钉钉群文件的自动化发送。通过结合钉钉企业内部应用与群机器人API,构建了包含智能令牌管理、文件上传与消息发送的完整工作流。文章提供了可直接复用的完整代码,并分享了定时任务、目录监听等进阶实战方案,帮助职场人士高效解决重复性文件发送难题,实现办公自动化。

7z8x2c4v6b9的博客 321

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

S7-1200PLC与昆仑通态触摸屏以太网通信的具体方法和步骤(图文)

Robot_PLC_HMI_Automation 1万+

解题报告 之 ZOJ2760 How Many Shortest Path

解题报告 ZOJ 2760 How Many Shortest Path 最大流 边不相交最短路的条数 Dinic

JUST CODE 1246

Google Earth Engine(GEE)——将sentinel - 2影像所有波段重采样到10m分辨率 (resample 和 projection的使用)

影像重投影是将一个影像从一个坐标系投影到另一个坐标系的过程。这通常涉及到将像素从一个平面坐标系变换到另一个平面坐标系。这可以用于许多应用中,例如建立数字高程模型(DEM)和地图制图。影像重投影通常需要进行数学计算,包括转换矩阵和插值算法,以确保像素值的准确性和精度。这次我们将对哨兵2好数据中20m分辨率的波段,重采样到10m分辨率中,然后同一参与计算。

此星光明博客 3107

四路 CAN 转 4G 网关

SG‑CAN‑4G‑410 为**四路隔离 CAN 转 4G 工业网关**,把 CAN2.0A/B 报文封装成 TCP/UDP 报文,通过 4G 无线网络实现 CAN 总线远程监控、远程控制。四路 CAN 相互独立;以太网仅用于本地配置,不做业务数据传输;支持移动 / 联通 / 电信 4G 网络。

S2003120416的博客 160

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【计算机网络】断点续传是怎么做到的:从 Range 请求到分片上传的完整机制

断点续传在下载侧靠的是 HTTP 现成的 Range 协议,Content-Range 保证偏移对得上,If-Range 防止文件变更导致的错误拼接;上传侧没有标准,需要自己设计 init/part/complete 三段式交互,核心是让服务端记住“哪些块已经收下”,从而把失败粒度从整个文件降到单个分片。 这套机制可以迁移到任何长耗时操作的设计上。判断方法很简单:先问失败粒度是多少。如果一次操作失败就得从头再来,那它迟早会在生产环境里出问题——传输、批量导入、数据迁移、长事务,都是同一个道理。把大操作切成

2503_94545876的博客 516

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汽车电子标定与测量的核心基石XCP协议

控制逻辑(算法)与标定参数(数据)。如果每次优化参数都要修改源码、重新编译并刷写Flash,整个研发周期的效率将趋近于零。标定(Calibration)技术正是为了解决这一痛点而生。它允许工程师在ECU运行过程中,动态观察内部变量(测量,Measurement),并在不中断运行的前提下实时修改控制变量(标定,Calibration)。在这一领域,XCP(Universal Measurement and Calibration Protocol,通用测量与标定协议)是公认的行业标准与核心基石。

diansandaosilaodanan的博客 375

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 293

SD-WAN 与传统企业组网方式有什么区别?六个维度分析技术差异与适用场景

SD-WAN 与传统组网区别,主要体现在网络管理模式、链路调度能力、可视化水平以及多站点扩展方式上。传统组网技术成熟、架构灵活,对于站点较少、业务简单、网络结构稳定的企业来说,仍然具有较高的实用价值。SD-WAN 则通过软件定义和集中化管理,为多站点网络管理、链路质量监测和业务流量调度提供了另一种技术实现方式。两者并不存在绝对的替代关系。在实际网络建设中,也可以根据不同业务和网络区域采用混合架构。

ESDWAN的博客 791

【Linux网络】TCP 服务器并发处理多客户端:从 fork 分发到双重 fork 彻底消灭僵尸进程

拆解 TCP 服务器并发演进链:fork 分发连接、SIGCHLD 循环回收僵尸、双重 fork 交孙进程给 init 收养,并给出模型选型与线上排错对照。

2301_78967866的博客 414

网口ps端--基础知识--调试(1)--deepseek

你现在卡住,是因为这每一层(硬件、驱动、lwIP 协议、IP 地址)中,只要有一层不对,网口就不通。物理层:看灯。灯亮说明线没问题,PHY 没死。MAC 驱动层:看串口打印。有没有打印出Link Speed?如果卡在自协商,说明你的 PHY 驱动还没配好。lwIP 协议层:如果底层通了,IP 也配对了,你调用udp_recv注册了回调函数,当电脑发来 UDP 包时,lwIP 会自动把数据包拆开,送到你的回调函数里。你之前一直在改,就是一直在死磕第 1 层和第 2 层。

AlibabaApple的博客 96

Windows syslog日志服务器搭建与模拟器对接

二 HCL 华三模拟器连接HOST直接让路由器接口UP。1.下载visualsyslog 日志服务器软件。4.7 日志服务器可以看到年份为2026年。2.2 华三路由器配置并执行日志服务器。2.4 华三路由器可以与日志服务器互通。3.2 日志服务器可以实时查看日志。3.4 日志服务器可以实时看到日志。4.6 路由器配置日志显示年份。五 日志服务器查看日志存放位置。4.5 日志服务器查看到日志。2.3 华三路由器接口UP。4.3 日志服务器清掉日志。路由器本地日志显示年份成功。4.在桌面生成快捷方式。

huainingning的博客 247

HTTP、SSE、WebSocket、Socket.IO:实时通信方案深度对比与选型指南

HTTP 是基础,是整个 Web 的底座;SSE 是单向推送的轻量最优解;WebSocket 是高性能双向实时通信的底层标准;Socket.IO 是一套降低开发门槛、抹平环境差异的上层框架。技术选型永远不是“哪个技术更酷”,而是匹配业务的实时性、交互方向、网络环境、团队维护成本。简单需求优先轻方案,复杂双向实时再上 WebSocket;如果追求快速落地、兼容各种奇葩网络,Socket.IO 是很好的选择。

changshuaihua001的博客 335

计算机毕业论文系统测试怎么写:从测试用例设计到对比实验,让“工作量“看得见

本文系统阐述计算机毕业论文中“系统测试”章节的撰写方法,涵盖功能测试用例设计(等价类、边界值、判定表)、性能测试压测方案与关键指标(平均响应时间、P99、吞吐量)、对比实验设计原则及评价指标选取。强调通过量化数据、阶梯加压曲线、瓶颈定位与多维度对比,真实展现研究工作量与技术深度,提供可直接套用的测试用例表与实验方案模板,助力论文脱颖而出。

wuwangzhiduoshao的博客 299

Linux网络编程:TCP多线程远程命令执行与线程池改造

前面已经实现了 TCP Echo Server,并且通过多进程和多线程解决了多个客户端连接的问题。不过目前服务器的业务还是比较简单,客户端发送什么,服务器就返回什么。这次在原来的多线程服务器上继续做一些改动,实现一个简单的远程命令执行功能。这次主要学习了两个内容。第一个是多线程远程命令执行。通过 Command 类封装命令的接收、检查、执行和结果返回,并使用 set 对允许执行的命令进行限制。第二个是线程池版本的 TCP Echo Server。通过和std::bind。

2501_93388101的博客 355

物联网通信协议全景梳理

本文系统梳理物联网通信协议体系,按分层架构(接入、网络、传输、应用层)解析主流协议特性与选型逻辑。核心观点:接入层决定连接方式,应用层决定数据交互模式,两者可灵活组合。关键建议:资源受限用CoAP+BLE/Zigbee;大规模云接入选MQTT+WiFi/NB-IoT;长距离低功耗用LoRa/NB-IoT;智能家居优先Matter over Thread/WiFi;实时交互用WebSocket;安全通信优选DTLS/QUIC。最终实现“按需选型,协同高效”的物联网通信设计。

weixin_67448099的博客 457

python如何编通讯程序

通讯程序需要处理IP地址和端口。IP地址用于标识网络上的设备,端口用于标识设备上的服务。编写通讯程序时,需要选择合适的端口号并确保它不与其他服务冲突。此外

2601_96798011的博客 176
上一篇: 混合图欧拉路
下一篇: poj 1067
Sov_Matrix
博客等级 码龄17年 0粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值