hdu3631(floyd)

来源:互联网 发布:ida pro 6.9 linux 编辑:程序博客网 时间:2024/06/04 19:04

题意:给出M条有向线段,开始的时候所有点不可用,依次给出一些可用点,中间会有提问是否可从A到B点,给出最短路的值。

思路:一开始我的思路是用dijkstra,最坏情况是10w的数据,所以我用邻接表+优先队列优化了,但是还是超时了,果断把这个否决掉了。

之后我觉得floyd很好使,(个人感觉floyd有点离线的味道),因为不管查询多少次,Floyd相当于只执行了一次,最后都存在了map里了嘛,而且点最多才300个,所以空间也肯定没有问题。

代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <utility>#define N 305#define M 100005#define inf 0x7ffffffusing namespace std;typedef pair<int,int> pii;int n,m,q,map[N][N];bool vis[N];void init(){    for(int i=0;i<n;i++)    {        map[i][i]=0;        vis[i]=false;        for(int j=i+1;j<n;j++)        {            map[i][j]=map[j][i]=inf;        }    }}void floyd(int k){    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++)        {            if(map[i][j]>map[i][k]+map[k][j])                map[i][j]=map[i][k]+map[k][j];        }    }}int main(){    int t=1,u,v,w;    while(scanf("%d %d %d",&n,&m,&q)!=EOF)    {        if(n==0 && m==0 && q==0) break;        init();        for(int i=0;i<m;i++)        {            scanf("%d %d %d",&u,&v,&w);            if(map[u][v]>w) map[u][v]=w;        }        if(t!=1) printf("\n");        printf("Case %d:\n",t++);        for(int i=0;i<q;i++)        {            scanf("%d",&u);            if(!u)            {                scanf("%d",&v);                if(!vis[v])                {                    vis[v]=true;                    floyd(v);                }                else printf("ERROR! At point %d\n",v);            }            else            {                scanf("%d %d",&v,&w);                if(!vis[v] || !vis[w]) printf("ERROR! At path %d to %d\n",v,w);                else if(map[v][w]==inf)  printf("No such path\n");                else printf("%d\n",map[v][w]);            }        }    }    return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 监控手机软件离线状态怎么办 云课堂忘记密码怎么办 广州办培训机构怎么办 一师一优课账号忘了怎么办 云相册空间不足怎么办 三星云空间不足怎么办 三星储存空间不足怎么办 宁阳县教育局强制补课怎么办 沉迷网络该怎么办英语 29岁沉迷游戏怎么办 学乐云登录不上怎么办 魔方学院无法识别怎么办 路由器卫士忘记密码怎么办 邮箱号忘记密码怎么办 水卡没钱了怎么办 旅行青蛙换手机怎么办 软件尚未受信任怎么办 百度搜不到的怎么办 百度中搜不到怎么办 山寨云网络异常怎么办 手机太重了怎么办 百度云网页版打不开怎么办 微鲸电视打不开怎么办 手机一直没信号怎么办 孩子作业效率低怎么办 员工做事效率低怎么办 吉他和弦转换慢怎么办 耳机低音轰头怎么办? 全民k歌太占内存怎么办 qq音乐登录失效怎么办 电视猫自动升级怎么办 酷狗账号注销怎么办 电脑监控老是坏怎么办 qq音乐qq登不上怎么办? 繁星工会解约不同意怎么办? dnf封号120小时怎么办 h1z1账号忘了怎么办 股票账户忘了怎么办 手机帐号被锁定怎么办 id帐号被锁定怎么办 微博帐号锁定怎么办