【9931】火车票
来源:互联网 发布:淘宝垃圾短信 编辑:程序博客网 时间:2024/04/30 13:25
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
【输入格式】
【输出格式】
Sample Input
3 6 8 20 30 40
7
2 6
3
7
8
13
15
23
Sample Output
70
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=9931
【题解】
要注意只能从左往右走;
然后根据任意两个点之间的距离建边就可以了;
跑一下spfa;
我的f数组定义一开始写在int main函数里面;莫名的WA,然后写在主程序上面就没事?
以后都养成习惯写在int main上面吧。
【完整代码】
#include <cstdio>#include <cstdlib>#include <cmath>#include <set>#include <map>#include <iostream>#include <algorithm>#include <cstring>#include <queue>#include <vector>#include <stack>#include <string>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define LL long long#define rep1(i,a,b) for (int i = a;i <= b;i++)#define rep2(i,a,b) for (int i = a;i >= b;i--)#define mp make_pair#define pb push_back#define fi first#define se secondtypedef pair<int,int> pii;typedef pair<LL,LL> pll;void rel(LL &r){ r = 0; char t = getchar(); while (!isdigit(t) && t!='-') t = getchar(); LL sign = 1; if (t == '-')sign = -1; while (!isdigit(t)) t = getchar(); while (isdigit(t)) r = r * 10 + t - '0', t = getchar(); r = r*sign;}void rei(int &r){ r = 0; char t = getchar(); while (!isdigit(t)&&t!='-') t = getchar(); int sign = 1; if (t == '-')sign = -1; while (!isdigit(t)) t = getchar(); while (isdigit(t)) r = r * 10 + t - '0', t = getchar(); r = r*sign;}const int MAXN = 100+10;const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};const double pi = acos(-1.0);int l1,l2,l3,c1,c2,c3,n,s,t,dis[MAXN];vector <int> g[MAXN],w[MAXN];bool inque[MAXN];queue <int> dl;int f[MAXN];void add(int x,int y,int z){ g[x].pb(y); w[x].pb(z);}int main(){ //freopen("D:\\rush.txt","r",stdin); cin >> l1 >> l2 >>l3>>c1>>c2>>c3; cin >>n; cin >> s >> t; if (s > t) swap(s,t); dis[1] = 0; rep1(i,2,n) rei(dis[i]); rep1(i,1,n-1) rep1(j,i+1,n) { int temp = abs(dis[i]-dis[j]); if (temp <=l1) add(i,j,c1); else if (temp<=l2) add(i,j,c2); else if (temp <= l3) add(i,j,c3); } memset(f,0x3f3f3f3f,sizeof f); f[s] = 0; inque[s] = true; dl.push(s); while (!dl.empty()) { int x = dl.front(); inque[x] = false; dl.pop(); int len = g[x].size(); rep1(i,0,len-1) { int y = g[x][i],co = w[x][i]; if (f[y]> f[x]+co) { f[y] = f[x]+co; if (!inque[y]) { inque[y] = true; dl.push(y); } } } } cout << f[t]<<endl; return 0;}
0 0
- 【9931】火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 火车票
- 没买到火车票
- 火车票网站
- 春运火车票
- 12306 火车票
- 火车票查询
- (ssl1586)火车票
- DroidPlugin代码分析(四) 进程管理
- Codeforces Round #383 (Div. 2)C.Arpa's loud Owf and Mehrdad's evil plan【思维+LCM】
- 筛选菜单
- linux命令大全——文档编辑
- markDown学习笔记
- 【9931】火车票
- Eclipse C++出现Launch failed,Binary not found问题安装MinGW编译器解决方案(Win7)
- 从指定文件(字节数组)获取内容以及获取长度
- 大数加法
- 前端技术-布局解决方案
- 关于前端面试
- Tomcat运行状态下 修改Velocity嵌套的页面时报 java.lang.OutOfMemoryError: PermGen space及其解决方法
- 合法性检查
- caffe编译问题汇总