COJ 0332 The Flash
传送门: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的更多相关文章
- 隐私泄露杀手锏 —— Flash 权限反射
[简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...
- 百度 flash html5自切换 多文件异步上传控件webuploader基本用法
双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...
- 解决“chrome提示adobe flash player 已经过期”的小问题
这个小问题也确实困扰我许久,后来看到chrome吧里面有人给出了解决方案: 安装install_flash_player_ppapi, 该软件下载地址:http://labs.adobe.com/do ...
- 在 Linux 中使用搜狗拼音输入法以及搞定 Flash 和支付宝
在 Ubuntu 中安装搜狗输入法 在 Ubuntu Kylin 系统中,默认安装搜狗拼音输入法,但是在原生 Ubuntu 系统中则不是.这可以理解,毕竟搜狗输入法的 Linux 版有 Kylin 团 ...
- [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决
http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...
- 基于Adobe Flash平台的3D页游技术剖析
写在前面 从黑暗之光,佛本是道,大战神的有插件3D页游.再到如今的魔龙之戒. 足以证明,3D无插件正在引领页游技术的潮流. 目前,要做到3D引擎,有以下几个选择. 说到这里,我们发现.这些都不重要. ...
- 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)
今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...
- 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 是因为目标板的芯片处于休眠 ...
- 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序
Nor Flash和Nand Flash的不同: 类型 NOR Flash Nand Flash 接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...
随机推荐
- Mono For Android离线激活
我们之前创建过Mono For Android的开发环境,但是使用一段时间后就说明证书过期,那如何破解呢? 但我说的这个也就只能使用免费的证书. 首先下载免费的证书,monoandroid.licx, ...
- MongoDB C++ 2.4.5 driver 编译安装问题
安装参考前文,http://blog.csdn.net/sheismylife/article/details/8794589 方法一致.只不过这次在GCC4.8.1上编译. scons instal ...
- 在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别--转
其中,在地址栏按回车又分为两种情况.一是请求的URI在浏览器缓存中未过期,此时,使用Firefox的firebug插件在浏览器里显示的HTTP请求消息头如下: Host 192.168.3.17 ...
- 实现ARC文件与MRC文件互转,和混合使用。
这段时间做项目是以MRC为主的 但是某些第三方现在都只能支持ARC了 找到了这篇文章 可谓是帮了大忙 亲测完全可用喔:-O 如何在未使用arc的工程中引入一个使用了arc特性的文件,如何在arc工程中 ...
- 这10篇 iOS 热文,你别错过哦
<移动开发必读书单> 某一领域的技术人,在他的职业生涯中,一定有一些绕不过去的技术和非技术的知识.有的时候,靠自己摸索.到处偷师,倒也能掌握.但是,这些别人早就趟过去的坎,大多已经有了非常 ...
- noip 2012 国王游戏(贪心+高精)
/* 我是不会说我考试的时候想到了正解却把金币取大看成金币求和的.... 觉得只按左右手乘积排序不太对 有反例 也可能我反例放到这个题里是错的吧 按自己的理解排的序 就是各种讨论... 假设 第i个人 ...
- readonly 与 const
readonly MSDN定义:readonly 关键字是可以在字段上使用的修饰符.当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数 ...
- Swift - 24 - switch语句的高级用法
//: Playground - noun: a place where people can play import UIKit // 对区间进行判断 var score = 90 switch s ...
- javascript基础学习(十三)
javascript之文档对象 学习要点: 文档对象 文档对象的应用 一.文档对象 Document对象是代表一个浏览器窗口或框架中的显示HTML文件的对象.javascript会为每个HTML文档自 ...
- spring 4 xxx 与jackson-dataformat.xxx类冲突
这段时间,做一个新的工作流的开发,在开始之初,用的jbpm,后来发现jbpm现在开发有问题,不能引用官方的工作空间,所要工作流跑不起来,于是用了activiti工作流,在配置spring和activi ...
