【codevs 1557】热浪的不同姿势
2015-12-16 13:19
351 查看
为了纪念回归(暂时还没有),先传统的刷刷热浪~
slf
slf
[code]#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <queue> using namespace std; const int MAXN = 100000 + 5; struct edge { int f,t,v; }l[MAXN << 1]; int first[MAXN],next[MAXN << 1],tot; void init() { memset(first,0xfff,sizeof(first)); tot = 0; return; } void build(int f,int t,int v) { l[++tot] = (edge){f,t,v}; next[tot] = first[f]; first[f] = tot; return; } deque <int> q; int dis[MAXN],use[MAXN]; void spfa_slf(int s) { memset(dis,0x3f,sizeof(dis)); memset(use,0,sizeof(use)); while(!q.empty()) q.pop_front(); q.push_back(s); use[s] = true; dis[s] = 0; q.push_back(0); while(!q.empty()) { int u = q.front(); q.pop_front(); use[u] = false; for(int i = first[u];i != -1;i = next[i]) { int v = l[i].t; if(dis[v] > dis[u] + l[i].v) { dis[v] = dis[u] + l[i].v; dis[v] < dis[q.front()] ? q.push_front(v) : q.push_back(v); } } } return; } int f,t,v; int n,m,s,e; int main() { init(); scanf("%d %d %d %d",&n,&m,&s,&e); for(int i = 1;i <= m;i ++) { scanf("%d %d %d",&f,&t,&v); build(f,t,v); build(t,f,v); } spfa_slf(s); printf("%d\n",dis[e]); return 0; }
相关文章推荐
- JSON解析
- android GridLayout布局
- 杭电acm1086
- 使用freeMark生成word
- iOS 上基于js的monkey的测试
- ActionScript 3.0 按钮控制音乐播放、暂停、停止、循环
- 【单元测试】如何编写spring dao的单元测试类、基于注解
- mysql类似于oracle的decode的一种用法
- mysql binlog 分析
- 【WIN08R2 Active Directory】之一 部署企业中第一台Windows Server 2008 R2域控制器
- iOS基础框架的搭建/国际化操作
- 黑马程序员---Java基础篇之流程控制语句及控制跳转语句
- 利用spring的拦截器自定义缓存的实现
- Android UiAutomator编译与运行测试代码
- centos6.6_vsftpd 虚拟账户FTP服务搭建
- 栈的链式表示和实现
- ImageView的scaleType属性
- Android JNI(3) --在C代码中使用logcat
- IOS 文件处理
- Android 的搜索机制 I-创建一个搜索框