这个拆边+队列操作实在是太秒了

队列头结点存的是一个存点集的vector,1到这个点集经过的路径权值是一样的,所以向下一层拓展时,先依次走一遍每个点的0边,再走1边。。。以此类推,能保证最后走出来的路径是最优的

/*
拆边+将每个点的边按权值排序+BFS
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define N 1000005
#define ll long long
#define mod 1000000007 ll n,m;
struct Edge{ll v,w;};
//bool operator<(Edge&a,Edge&b){return a.w<b.w;}
vector<int>G[N][];
vector<int>q[N];//队列里面是一堆结点 ll ans[N],vis[N]; int main(){
cin>>n>>m;int nn=n;
for(int i=;i<=m;i++){
int u,v;
cin>>u>>v;
int w[]={},len=,t=i;
while(t){
w[++len]=t%;t/=;
}
int l=,r=len;
while(l<r){
swap(w[l],w[r]);
++l,--r;
} int pre=u;
for(int j=;j<=len;j++){
int newnode;
if(j==len)newnode=v;
else newnode=++n;
G[pre][w[j]].push_back(newnode);
pre=newnode;
}
pre=v;
for(int j=;j<=len;j++){//反向边也要反着加
int newnode;
if(j==len)newnode=u;
else newnode=++n;
G[pre][w[j]].push_back(newnode);
pre=newnode;
}
} int head=,tail=;
q[++tail].push_back();vis[]=;
for(;head<=tail;head++){
for(int i=;i<=;i++){//先走队列头结点所有元素的0...
int flag=;
for(auto u:q[head]){
for(auto v:G[u][i])if(!vis[v]){
vis[v]=flag=;
q[tail+].push_back(v);
ans[v]=(ans[u]*+i)%mod;
}
}
if(flag)tail++;
}
} for(int i=;i<=nn;i++)
cout<<ans[i]<<'\n';
}

最新文章

  1. cookie相关
  2. MIT 6.828 JOS学习笔记3. Exercise 1.2
  3. 计算机网络(8)-----TCP报文段的首部格式
  4. Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
  5. 整理了一些常用的jQuery动画事件
  6. javaEE规范和SSH三大框架到底有什么关系
  7. django 架构点点滴滴
  8. BestCoder12 1002.Help him(hdu 5059) 解题报告
  9. LR实现http协议性能测试脚本
  10. 面试题——设计一个程序:运行报错Stack Overflow Error
  11. Java [leetcode 17]Letter Combinations of a Phone Number
  12. Minimum Depth of Binary Tree ——LeetCode
  13. hdu 1301 Jungle Roads
  14. Merkaartor,Marble,QGIS等等
  15. win10 UWP 剪贴板 Clipboard
  16. 关于vue学习中的一些
  17. stream流操作List工具类
  18. 【转】一文掌握 Linux 性能分析之 I/O 篇
  19. 【SQL跟踪工具】SQL Profiler 跟踪器
  20. centos7 下安装Apache2+MariaDB+PHP5过程详解

热门文章

  1. c#发送邮件功能
  2. 用define 宏定义注释符号
  3. kafka ProducerConfig 配置
  4. rsync+inotify实现实时同步案例
  5. 监督局部线性嵌入算法(SLLE算法)
  6. mvnw简介
  7. 10个艰难的Java面试题与答案
  8. sed(seream editor)流编辑器
  9. OpenGL学习——自定义Shader工具类
  10. Gym 102007I 二分 网络流