vjudge题面地址


SOL

对于 a&lt;bandLink[1][n]==0a&lt;b\ and\ Link[1][n]==0a<b and Link[1][n]==0,对m条边正向bfs即可;
对于 a&gt;bandLink[1][n]==1a&gt;b\ and\ Link[1][n]==1a>b and Link[1][n]==1,显然不能在n2−mn^2-mn2−m条边的bbb图上直接bfs;

可以把bbb图转化为mmm 条边的补集。若用每一个点尝试更新未更新的点,对于所有点,在bbb图不能更新出的点总和是m.m.m.

那么构建对点1−n1-n1−n的双向链表,每次用bfs到的当前uuu尝试更新链表中的点(记为vvv),若能更新,便把vvv从链表中删除。

时间复杂度:O(n+m)O(n+m)O(n+m)。证明:若当前成功更新,当前O(1)O(1)O(1),链表中少一个点,总共O(n)O(n)O(n)。若不能更新,当前O(1)O(1)O(1),总共最多mmm次更新失败,为O(m)O(m)O(m)。


CODE

#include<bits/stdc++.h>
using namespace std;
#define sf scanf
#define pf printf
#define ll long long
#define cs const
#define db double
#define ri register int
#define gc getchar()
#define in red()
inline int red(){int num=0,f=1;char c=gc;for(;!isdigit(c);c=gc)if(c=='-')f=-1;for(;isdigit(c);c=gc)num=num*10+(c^48);return num*f;
}
cs int N=1e5+10,M=1e6+10;
int pre[N],suf[N];
int vis[N],outstk[N],head[N],to[M],nxt[M],a,b,cnt=0,n,m;
ll dis[N];
inline void addedge(int u,int v){nxt[++cnt]=head[u];head[u]=cnt;to[cnt]=v;nxt[++cnt]=head[v];head[v]=cnt;to[cnt]=u;
}
queue<int> q;
inline ll bfs1(int k){q.push(1);vis[1]=1;dis[1]=0;while(!q.empty()){int u=q.front();q.pop();for(ri i=head[u];i;i=nxt[i]){int v=to[i];if(vis[v])continue;vis[v]=1;dis[v]=dis[u]+k;q.push(v);}}return dis[n];
}
inline void delet(int x){suf[pre[x]]=suf[x];pre[suf[x]]=pre[x];
}
inline ll bfs2(int k){memset(outstk,0,sizeof (outstk));for(ri i=1;i<=n+1;++i)pre[i+1]=suf[i-1]=i;q.push(1);dis[1]=0;while(!q.empty()){int u=q.front();q.pop();for(ri i=head[u];i;i=nxt[i])vis[to[i]]=1;for(ri i=0;i^(n+1);i=suf[i]){if(i>1&&!vis[i]&&!outstk[i]){dis[i]=dis[u]+k;q.push(i);delet(i);outstk[i]=1;}}for(ri i=head[u];i;i=nxt[i])vis[to[i]]=0;}return dis[n];
}
signed main(){//  freopen("data.in","r",stdin);while(sf("%d%d%d%d",&n,&m,&a,&b)!=EOF){memset(head,0,sizeof (head));memset(vis,0,sizeof(vis));memset(dis,0x5f,sizeof (dis));cnt=0;bool f=1;for(ri i=1;i<=m;++i){int u,v;sf("%d%d",&u,&v);if((u==1&&v==n)||(u==n&&v==1))f=0;addedge(u,v);}if(a==b)cout<<a<<'\n';else if(a<b){if(!f)cout<<a<<'\n';else cout<<min(1ll*b,bfs1(a))<<'\n';}else if(a>b){if(!f)cout<<min(1ll*a,bfs2(b))<<'\n';else cout<<b<<'\n';}}return 0;
}

SCU 4444 Travel 【次完全图最短路】相关推荐

  1. SCU 4444: Travel(最短路)

    Travel The country frog lives in has n towns which are conveniently numbered by 1,2,-,n . Among n(n− ...

  2. Travel SCU - 4444

    http://acm.scu.edu.cn/soj/problem.action?id=4444 先看 1与n之间是否有原图边 有的话就求补图最短路和a比较 没有就求原图最短路和b比较 都是一边BFS ...

  3. Dairy?Diary!

    2019/9/20 既来之则安之.没什么好惆怅好难过的. 竞赛本来就是你现在的任务重心 这样的安排也可以为你提供更多的学习时间 你不是总闹着时间不够用吗 现在就好啦,你可以抓紧时间搞了 每周六8:00 ...

  4. 【QBXT】学习笔记——Day3/4图论+dp

    继续上传一波笔记吧. Day3 1.16AM 今天讲图论,以习题为主. 开篇水题: 给一幅图,若删去一个点后变成一棵树,则这个点合法.问哪些点合法. 思路根据树的性质:这个点不是割点,m-这个点的度数 ...

  5. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  6. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  7. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  8. kk_想要学习的知识

    2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...

  9. 图论练习题(存起来练)

    =============================以下是最小生成树+并查集======================================  [HDU]  1213 How Man ...

最新文章

  1. 怎么用python做表格-怎么用python画表格?
  2. 国家卫健委发布第一版新冠疫苗接种技术指南
  3. 《OD大数据实战》MongoDB环境搭建
  4. 高效精准分析定位系统BUG,让你无所不能
  5. C++常类型(const)
  6. flash源文件_Animate/FLASH如何将多个源文件合并
  7. C语言解析日志,存储数据到伯克利DB
  8. java合并不连续的时间段_基于时间戳不完全匹配的pandas合并
  9. R语言︱用excel VBA把xlsx批量转化为csv格式
  10. mysql排序区分大小写吗_MySQL的order by时区分大小写
  11. python3 csv以追加方式写入_从拉入的JSON d向CSV追加和或写入
  12. 如何在chrome加载.ctx文件(亲测可用,只需3步)
  13. ai神经网络滤镜安装包
  14. 在Chrome谷歌浏览器中使用H5地理位置API
  15. 安装SQL SERVER2019 安装CAB文件问题
  16. 大智慧策略投资终端_智慧历史:不需要宏伟的策略,只需开放
  17. OpenCASCADE:OCCT应用框架OCAF之XML支持
  18. 那个单位用计算机系统冷却,消防知识100题
  19. 国家信息安全等级考试NISP一级题库(1)第1至100题
  20. 个人博客系统之框架搭建

热门文章

  1. Google Play发布android app
  2. Power BI中如何处理相同名称的客户
  3. Mean ± SEM or Mean(SD)
  4. “极盾-2021”众测推荐名录发布,墨云科技荣誉登榜
  5. krpano全景之解决微信内置浏览器不能自动播放音频的问题
  6. 【厚积薄发系列】C++项目总结14—Windows平台下异常捕获不到问题分析
  7. aspx repeater 用法_ASP.NET-----Repeater数据控件的用法总结(转)
  8. ARM7中断处理过程、状态、嵌套
  9. 爱立信高级副总裁柯瑞东:爱立信的“中国任务”
  10. 威客相当地址收藏_无需整理