Hrbust 1540 摧毁车站【Floyd+记录路径+思维】

摧毁车站
Time Limit: 1000 MSMemory Limit: 65535 K
Total Submit: 9(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No
Description

Gabiluso是他国家最厉害的间谍之一。现在他试图去完成一个“不可能”的任务-减缓Colugu市的军队抵达机场的速度。Colugu市有n个车站和m条路。每条路直接连接两个车站,所有的路都是单向的。为了维护空气质量,政府停用了所有军队车辆。所以军队必须乘坐巴士去机场。两个车站之间可能不只一条路。如果一个车站被摧毁,那么所有通向那个车站的道路都没用了。Gabiluso需要去做的是摧毁一些车站使得军队不能在k分钟内赶到机场。一辆巴士通过一条路只需要一分钟。从1到n给所有车站编号。编号为1的车站在军营里,编号为n的车站在机场里。军队总是从编号为1的车站出发。

由于有重兵把守,所以编号为1和n的车站不能被摧毁。当然那里没有一条路直接从1号车站连接到n号车站。

请帮助Gabiluso计算他需要摧毁车站的最小数量,他必须完成任务。

Input

有多组测试数据。当输入三个0时,输入停止。

对于每组测试数据: 

第一行包含三个整数,n,m 和 k。 (0 < n <= 50,0 < m <= 4000, 0 < k < 1000);

紧接着有m行,每行包含两个整数 s 和 f,意思是有一条路从s号车站通往f号车站。

Output
对于每组测试数据,输出 Gabiluso 必须摧毁车站的最小数量。
Sample Input
5 7 3 
1 3 
3 4 
4 5 
1 2 
2 5 
1 4 
4 5 
0 0 0
Sample Output
2

思路:


1、首先我们确定题目解题突破点:n<=50,最开始的时候是想Dfs枚举所有拆点情况,维护最小拆点数,输出答案,但是毕竟n最大也有50。最大枚举量达到2^50,也避免不了TLE的命运。


2、思路核心还是放在n<=50上边,最多拆了48个点,其实这个图就一定不连通了,其实也就是说,如果我们能够每一次确定拆一个点能够使得最短路的值变大或者是拆一条最短路,那么我们最多拆48次点,就一定能够达到目的,而且题目保证有解,那么我们只要每一次锁定一个点,拆掉他,能够使得最短路值变大,或者是能够拆一条最短路,那么拆这个点就是有意义的。


3、那么这个点到底应该拆哪里的呢?毋庸置疑,如果拆的这个点不在最短路上,那么就不会影响当前图的最短路问题,那么我们记录路径,拆最短路上的点,那么我们也知道,拆最短路上的任意一点,都能使得这条最短路无效,也就达到了刚才所述的目的,拆掉最短路上任意一点,能够使得最短路值变大,或者是能够拆一条最短路。


4、既然确定到了这里,思路就已经定型了:

①求一遍最短路,并且记录路径,因为点边都比较少,用哪一种都可以。

②判断一下最短路值,如果大于k,跳出算法。否则跳③

③拆一个最短路上的点,跳①。


Ac代码:


#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int tmp[55][55];
int pre[55][55];
int vis[55];
int map[55][55];
int main()
{
    int n,m,k;
    while(~scanf("%d%d%d",&n,&m,&k))
    {
        if(n==0&&m==0&&k==0)break;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                map[i][j]=0x3f3f3f3f;
                tmp[i][j]=0x3f3f3f3f;
                pre[i][j]=i;
            }
        }
        for(int i=0;i<m;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            map[x][y]=1;
            tmp[x][y]=1;
        }
        memset(vis,0,sizeof(vis));
        int cont=0;
        while(1)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    map[i][j]=tmp[i][j];
                    pre[i][j]=i;
                }
            }
            for(int i=1;i<=n;i++)
            {
                if(vis[i]==1)continue;
                for(int j=1;j<=n;j++)
                {
                    for(int k=1;k<=n;k++)
                    {
                        if(map[j][k]>map[j][i]+map[i][k])
                        {
                            map[j][k]=map[j][i]+map[i][k];
                            pre[j][k]=pre[i][k];
                        }
                    }
                }
            }
            if(map[1][n]>k)break;
            if(vis[pre[1][n]]!=1)
            vis[pre[1][n]]=1;
            cont++;
        }
        printf("%d\n",cont);
    }
}






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值