传送门: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. Ubuntu 下 JDK+Tomcat+MySql 环境的搭建

    Linux环境 修改catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS=&quo ...

  2. 【AIX】采用vi语法编辑命令行

    AIX中不能像centos那样移动方向键上.下来查询历史键入的命令行记录 可以通过一条命令采用vim的语法编辑命令行,查询历史记录. # set -o vi 在命令行输入上述命令后就可以: ESC+k ...

  3. 5事件DOM零级事件跟DOM二级事件

    事件的行为传播,行为本身跟事件绑定没有关系:1.全新认识事件(某一个具体的行为)->行为本身:浏览器天生自带的一些行为操作->click,mouseover(mouseenter),mou ...

  4. (一)SAPI简述

    SAPI,软件中的语音技术包括两方面的内容,一个是语音识别(speech recognition) 和语音合成(speech synthesis).这两个技术都需要语音引擎的支持. 下面我们来了解下基 ...

  5. Android Marquee

    android:singleLine="true" android:marqueeRepeatLimit="marquee_forever" android:e ...

  6. 安装php时,make步骤报错make: *** [ext/gd/gd.lo] Error 1

    安装PHP时,make步骤报错make: *** [ext/gd/gd.lo] Error 1 /usr/local/src/LAMP+memcahed+catci/php-5.4.0/ext/gd/ ...

  7. scn转换为十进制

  8. Asp.net 主题 【2】

    通常我们经常看到网页,一些软件提供换肤功能,各种主题间切换.ASP.NET 2.0 中可以用Theme和skin以及CSS轻松实现这个功能. 首先简单介绍一下三种技术:主题(Theme)技术,面板(s ...

  9. (转载)小课堂UI-Star Diamond Tutorial

  10. Navicat 选择语句

    1.进入数据库后,点击Query 2.点击new query 3.左边提供界面的筛选条件,如果不清楚sql语句,可直接在上面操作 4.右边可自己编写sql语句 5.写完语句后,点击Run,在resul ...