次短路poj3463
poj3463
大意:统计最小的长度个数+统计最小的长度+1的个数,大概就是求最短路和次短路的条数
更新的时候有5种情况,有个细节就是它得是二维的,一个表示节点编号,一个0/1表示它是次短路的还是最短路的,把结构体扔到队列里。需要更新的就是4种情况。
w<最小值
w=最小值
w<次小值
w=次小值
- #include<iostream>
- #include<cstdio>
- #include<queue>
- #include<algorithm>
- #include<cmath>
- #include<ctime>
- #include<set>
- #include<map>
- #include<stack>
- #include<cstring>
- #define inf 2147483647
- #define ls rt<<1
- #define rs rt<<1|1
- #define lson ls,nl,mid,l,r
- #define rson rs,mid+1,nr,l,r
- #define N 10010
- #define For(i,a,b) for(long long i=a;i<=b;i++)
- #define p(a) putchar(a)
- #define g() getchar()
- using namespace std;
- long long T;
- long long n,m,x,y,v,s,t,w,flag,num,now;
- long long d[N][];
- long long f[N][];
- bool vis[N][];
- struct edge{
- long long n;
- long long v;
- edge *next;
- }*e[N];
- struct node{
- long long num;
- long long flag;
- };
- queue<node>q;
- void in(long long &x){
- long long y=;
- char c=g();x=;
- while(c<''||c>''){
- if(c=='-')y=-;
- c=g();
- }
- while(c<=''&&c>=''){
- x=(x<<)+(x<<)+c-'';c=g();
- }
- x*=y;
- }
- void o(long long x){
- if(x<){
- p('-');
- x=-x;
- }
- if(x>)o(x/);
- p(x%+'');
- }
- void push(long long x,long long y,long long v){
- edge *p;
- p=new edge();
- p->n=y;
- p->v=v;
- if(e[x]==)
- e[x]=p;
- else{
- p->next=e[x]->next;
- e[x]->next=p;
- }
- }
- void spfa(){
- memset(d,0x3f,sizeof(d));
- d[s][]=;
- f[s][]=;
- q.push(node{s,});
- while(!q.empty()){
- node tp=q.front();
- q.pop();
- now=tp.num;
- flag=tp.flag;
- vis[now][flag]=;
- for(edge *i=e[now];i;i=i->next){
- w=d[now][flag]+i->v;
- if(w<d[i->n][]){
- if(d[i->n][]!=d[][]){
- d[i->n][]=d[i->n][];
- f[i->n][]=f[i->n][];
- if(!vis[i->n][]){
- q.push(node{i->n,});
- vis[i->n][]=;
- }
- }
- f[i->n][]=f[now][flag];
- d[i->n][]=w;
- if(!vis[i->n][]){
- q.push(node{i->n,});
- vis[i->n][]=;
- }
- }
- else
- if(w==d[i->n][])
- f[i->n][]+=f[now][flag];
- else
- if(w<d[i->n][]){
- d[i->n][]=w;
- f[i->n][]=f[now][flag];
- if(!vis[i->n][]){
- q.push(node{i->n,});
- vis[i->n][]=;
- }
- }
- else
- if(w==d[i->n][])
- f[i->n][]+=f[now][flag];
- }
- }
- }
- void clear(){
- memset(f,,sizeof(f));
- memset(vis,,sizeof(vis));
- memset(e,,sizeof(e));
- }
- int main(){
- in(T);
- while(T--){
- clear();
- in(n);in(m);
- For(i,,m){
- in(x);in(y);in(v);
- push(x,y,v);
- }
- in(s);in(t);
- spfa();
- if(d[t][]==d[t][]+)
- o(f[t][]+f[t][]);
- else
- o(f[t][]);
- p('\n');
- }
- return ;
- }
次短路poj3463的更多相关文章
- poj3463 最短路和比最短路长1的路径数
这题需要很好的理解Dij. 在Dij的基础上,每个点多一个次短路的长度和数量进行控制. 那么在队列中,最短路控制时出现n次,次短路控制出现n次.注意松弛条件中val值和最短路.次短路的关系. 这题需要 ...
- 最短路和次短路的条数(dijstra算法或spfa算法)POJ3463
http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- POJ---3463 Sightseeing 记录最短路和次短路的条数
Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9247 Accepted: 3242 Descr ...
- POJ3463【次短路】
转自:http://www.cnblogs.com/jackge/archive/2013/04/29/3051273.html 算法:最短路和次短路.Dijkstra算法.采用邻接表建图. 总结:不 ...
- [POJ3463] Sightseeing(次短路 Heap + Dijkstra)
传送门 用dijkstra比较好,spfa可能有的重复 dis[x][2]:dis[x][0]表示起点到x的最短路.dis[x][1]表示起点到x的次短路: tot[x][2]:tot[x][0]表示 ...
- poj3463 Sightseeing——次短路计数
题目:http://poj.org/problem?id=3463 次短路计数问题,在更新最短路的同时分类成比最短路短.长于最短路而短于次短路.比次短路长三种情况讨论一下,更新次短路: 然而其实不必被 ...
- poj3463&&hdu1688 次短路(dijkstra)
A*算法超内存. 对于最短路,我们可以维护dis[]数组,来求得最短路,但是此题有次短路,所以定义dis[][2],dis[][0]表示最短路,dis[][1]表示次短路;cnt[][2],cnt[] ...
- 洛谷P1144 最短路计数 及其引申思考
图论题目练得比较少,发一道spfa的板子题目- 题目:P1144 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: ...
- bzoj1001--最大流转最短路
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...
随机推荐
- 阿里第一颗芯片问世,平头哥发布最强AI芯片含光800
阿里巴巴第一颗自研芯片正式问世.9月25日的杭州云栖大会上,达摩院院长张建锋现场展示了这款全球最强的AI芯片——含光800.在业界标准的ResNet-50测试中,含光800推理性能达到78563 IP ...
- 思维题+栈的应用——cf1092D有意思
第一例很简单,把两个差为偶数的列不断合并即可 这种不需要撤销的合并相连数直接用栈来做 /* 如果相邻两列高度差为偶数 那么可以直接消去 */ #include<bits/stdc++.h> ...
- JAVA入门各种API参考
java sdk: https://docs.oracle.com/javase/8/docs/api/ servlet api: http://tomcat.apache.org/tomcat-8. ...
- 数据库连接JDBC
#=======================mysql============================= #jdbc.driverClassName=com.mysql.jdbc.Driv ...
- marquee标签(跑马灯效果)
- Pyinstaller打包Web项目
最近需要用python打包一个单页面网页demo,于是准备用python包pyinstaller来打包程序.网上搜索了一下,大部分教程都是打包非web项目,这里分享一下打包简单网页demo的过程. 系 ...
- Java开发系列-文件上传
概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...
- Luogu P1041 传染病控制(搜索)
P1041 传染病控制 题意 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这 ...
- 【JZOJ2288】【BZOJ1898】【luoguP2579】沼泽鳄鱼
description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了 ...
- 0908NOIP模拟测试赛后总结
%%%skyh rank1- 奶风神.kx.有钱人 rank2-210 NC锅.RNB.B哥 rank5-200 我 rank32- 9-13upd:无意中点进了某个博客发现我竟然考场上yy出了树上莫 ...