传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=302

The Flash
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

"My name is Barry Allen and I'm the fastest man alive. When I was a child, I saw my mom killed by something impossible, and my father went to prison for her murder. Then an accident made me the impossible. To the outside world, I'm an ordinary forensic scientist. But secretly, I used my speed to fight crim and find others like me. And one day, I'll find who killed my mother and get justice for my father. I am the flash."

以上是xjr背诵的闪电侠片头的片段。

B.I.T.C.H.们玩得正High时,闪电侠来得瑟他的速度了。他邀请xjr和Avengers观看他夜晚在城市跑步的场景。

他的路线是这样的:(一共有n个城市,城市由1到n编号,城市之间有m条边)

1 → 2 → 1 → 3 → 1 → 4 → 1 → 5 → 1 → … → n-1 → 1 → n → 1

但由于闪电侠速度超过闪电,他也有了一种和电流一样的心理——走最短路,现在你需要回答闪电侠最少需要走多少千米的路程。

 
 
 
 
 
输入
第一行,两个整数n和m(见试题描述)
接下来m行,每行三个整数a,b和c,表示从a城市到b城市有一条有向边,长度为c
输出
闪电侠走的最短路程
输入示例
5 10
2 3 8
1 5 90
3 5 82
1 2 76
1 3 8
5 3 4
4 1 23
4 5 6
3 5 6
5 4 2
输出示例
232
其他说明
1 < n, c < 1001
1 < m < 100001
数据保证城市1能到达任何城市,并且任何城市能到达城市1

题解:最短路瞎跑大水题(出题人竟然没有卡SPFA!!!)

更新邻接表:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+,maxm=+,inf=1e9;
struct SPFA{
struct ted{int x,y,w;ted*nxt;}adj[maxm],*fch[maxn],*ms;
bool inq[maxn];int d[maxn];
void init(int n){
ms=adj;fill(d,d+n+,inf);memset(inq,false,sizeof(inq));return;
}
void ade(int u,int v,int w){
*ms=(ted){u,v,w,fch[u]};fch[u]=ms++;
return;
}
void spfa(int S){
queue<int>Q;Q.push(S);d[S]=;
while(!Q.empty()){
int u=Q.front();Q.pop();inq[u]=false;
for(ted*e=fch[u];e;e=e->nxt){
int v=e->y;
if(d[v]>d[u]+e->w){
d[v]=d[u]+e->w;
if(!inq[v]) Q.push(v),inq[v]=true;
}
}
} return;
}
}p1,p2;
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')sig=-;ch=getchar();}
while(isdigit(ch))x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=,buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
int n,m;
void init(){
n=read();m=read();p1.init(n);p2.init(n);
int x,y,w;
for(int i=;i<=m;i++){
x=read();y=read();w=read();
p1.ade(x,y,w);p2.ade(y,x,w);
}
p1.spfa();p2.spfa();
int ans=;
for(int i=;i<=n;i++){
ans+=p1.d[i]+p2.d[i];
} write(ans);
return;
}
void work(){
return;
}
void print(){
return;
}
int main(){init();work();print();return ;}

数组版:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define inf 10000000
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+,maxm=+;
struct ShortiestPath{
struct Tedge{int x,y,w,next;}adj[maxm];int fch[maxn],ms;
int d[maxn],S,n;bool inque[maxn];
void AddEdge(int u,int v,int w){adj[++ms]=(Tedge){u,v,w,fch[u]};fch[u]=ms;return;}
void init(int S,int n){
this->S=S;this->n=n;ms=;
memset(inque,false,sizeof(inque));
memset(fch,,sizeof(fch));
for(int i=;i<=n;i++) d[i]=inf;
return;
}
void SPFA(){
queue<int>Q;d[S]=;Q.push(S);
while(!Q.empty()){
int u=Q.front();Q.pop();inque[u]=false;
for(int i=fch[u];i;i=adj[i].next){
int v=adj[i].y;
if(d[v]>d[u]+adj[i].w){
d[v]=d[u]+adj[i].w;
if(!inque[v]){
inque[v]=true;
Q.push(v);
}
}
}
} return;
}
}p1,p2;
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')sig=-;ch=getchar();}
while(isdigit(ch))x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=,buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
int n,m;
void init(){
n=read();m=read();
p1.init(,n);p2.init(,n);
for(int i=;i<=m;i++){
int a=read(),b=read(),c=read();
p1.AddEdge(a,b,c);
p2.AddEdge(b,a,c);
}
return;
}
void work(){
p1.SPFA();p2.SPFA();
return;
}
void print(){
int ans=;
for(int i=;i<=n;i++){
ans+=p1.d[i]+p2.d[i];
}
write(ans);
return;
}
int main(){init();work();print();return ;}

当然啦还是写Dijkstra比较稳妥,小健建のDijkstra:(原谅我懒到一定境界了。。。)

 #include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=;
const int maxm=;
const int INF=;
struct Edge
{
int from,to,dist;
};
struct Heapnode
{
int d,u;
bool operator < (const Heapnode& rhs) const
{
return d>rhs.d;
}
};
struct Dijkstra
{
int n,m;
int p[maxn];
Edge edges[maxm];
int first[maxn],next[maxm];
int d[maxn];
bool done[maxn];
void init(int n)
{
this->n=n;
m=;
memset(first,,sizeof(first));
}
void AddEdge(int from,int to,int dist)
{
edges[++m]=(Edge){from,to,dist};
next[m]=first[from];
first[from]=m;
}
void dijkstra(int s)
{
memset(done,,sizeof(done));
priority_queue<Heapnode> Q;
for(int i=;i<=n;i++) d[i]=INF;
d[s]=;
Q.push((Heapnode){,s});
while(!Q.empty())
{
Heapnode x=Q.top();
Q.pop();
if(done[x.u]) continue;
done[x.u]=;
for(int i=first[x.u];i;i=next[i])
{
Edge& v=edges[i];
if(d[v.to]>d[x.u]+v.dist)
{
d[v.to]=d[x.u]+v.dist;
Q.push((Heapnode){d[v.to],v.to});
}
}
}
}
}sol1,sol2;
int main()
{
int n,m,a,b,c;
scanf("%d%d",&n,&m);
sol1.init(n); sol2.init(n);
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
sol1.AddEdge(a,b,c);
sol2.AddEdge(b,a,c);
}
sol1.dijkstra(); sol2.dijkstra();
long long ans=;
for(int i=;i<=n;i++) ans+=sol1.d[i]+sol2.d[i];
printf("%lld\n",ans);
return ;
}

COJ 0332 The Flash的更多相关文章

  1. 隐私泄露杀手锏 —— Flash 权限反射

    [简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...

  2. 百度 flash html5自切换 多文件异步上传控件webuploader基本用法

    双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...

  3. 解决“chrome提示adobe flash player 已经过期”的小问题

    这个小问题也确实困扰我许久,后来看到chrome吧里面有人给出了解决方案: 安装install_flash_player_ppapi, 该软件下载地址:http://labs.adobe.com/do ...

  4. 在 Linux 中使用搜狗拼音输入法以及搞定 Flash 和支付宝

    在 Ubuntu 中安装搜狗输入法 在 Ubuntu Kylin 系统中,默认安装搜狗拼音输入法,但是在原生 Ubuntu 系统中则不是.这可以理解,毕竟搜狗输入法的 Linux 版有 Kylin 团 ...

  5. [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决

    http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...

  6. 基于Adobe Flash平台的3D页游技术剖析

    写在前面 从黑暗之光,佛本是道,大战神的有插件3D页游.再到如今的魔龙之戒. 足以证明,3D无插件正在引领页游技术的潮流. 目前,要做到3D引擎,有以下几个选择. 说到这里,我们发现.这些都不重要. ...

  7. 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)

    今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...

  8. MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL

    MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL   是因为目标板的芯片处于休眠 ...

  9. 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序

    Nor Flash和Nand Flash的不同: 类型 NOR Flash  Nand Flash  接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...

随机推荐

  1. 谈论C++当然结果

    C++编程课程的考试已经结束.这是第一次OJCBT.摸着石头过河,考试没有给学生理解的说法.现在尘埃落定.一些交代. 先说大的成就的治疗原则.事实上,有很多的纠结. 按理说,合格的太,无法挂.但实际情 ...

  2. python中的TCP编程学习

    今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送 ...

  3. 《Android开发艺术探索》读书笔记 (4) 第4章 View的工作原理

    本节和<Android群英传>中的第3章Android控件架构与自定义控件详解有关系,建议先阅读该章的总结 第4章 View的工作原理 4.1 初始ViewRoot和DecorView ( ...

  4. 模板-->欧几里得算法

    如果有相应的OJ题目,欢迎同学们提供相应的链接 相关链接 所有模板的快速链接 简单的测试 None 代码模板 /* * TIME complexity:O(logN) means very fast. ...

  5. 使用CSS、JS的几种方法

    引用CSS到html网页里的4种方法 1.行内式 在标记的style属性中设定CSS样式,这种方式本质上没有体现出CSS的优势,因此不推荐使用     <div style="widt ...

  6. JqueryAjax

    1. 2. 3. 4. 5. 6. 7.

  7. centos5.2 x86 安装 oracle 11g2r 日志

    一.安装centos 二.安装ora所需的库 三.修改centos内核 四.建用户组和目录结构等 五.安装ora11g2r 六.安装sqlplus的翻页程序和help补丁 七.自启动脚本 八.常用命令 ...

  8. loop_login.sh

    [oracle@ora10g scripts]$ cat loop_login.sh #/bin/bash####################export ORACLE_BASE=/u01/app ...

  9. Xcode7 通过 Single View Application 得到一个 Empty Application 工程

    方法: 创建一个 Empty Application 工程 下面还是详细的说一下通过一个 Single View Application 工程得到一个 Empty Application 工程的方法: ...

  10. CSS 布局Float 【3】

    float 属性定义元素在哪个方向浮动. 浮动元素会生成一个块级框,而不论它本身是何种元素. 如果浮动非替换元素,则要指定一个明确的宽度:否则,它们会尽可能地窄. 注释:假如在一行之上只有极少的空间可 ...