博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ】1631: [Usaco2007 Feb]Cow Party(dijkstra)
阅读量:6076 次
发布时间:2019-06-20

本文共 2305 字,大约阅读时间需要 7 分钟。

看到m<=100000果断用dij(可是好像dij比spfa还慢了在这里?)//upd:那是因为你写的根本不是dij,,233

#include 
#include
#include
#include
#include
#include
#include
using namespace std;#define rep(i, n) for(int i=0; i<(n); ++i)#define for1(i,a,n) for(int i=(a);i<=(n);++i)#define for2(i,a,n) for(int i=(a);i<(n);++i)#define for3(i,a,n) for(int i=(a);i>=(n);--i)#define for4(i,a,n) for(int i=(a);i>(n);--i)#define CC(i,a) memset(i,a,sizeof(i))#define read(a) a=getint()#define print(a) printf("%d", a)#define dbg(x) cout << #x << " = " << x << endl#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }inline const int max(const int &a, const int &b) { return a>b?a:b; }inline const int min(const int &a, const int &b) { return a
>2;int ihead[N], n, m, d[N], T, cnt, d1[N], X[M], Y[M], W[M];struct ED { int to, next, w; }e[M];struct ND { int id; const bool operator<(const ND &b) const { return d[id]>d[b.id]; } };priority_queue
q;void add(int u, int v, int w) { e[++cnt].next=ihead[u]; ihead[u]=cnt; e[cnt].to=v; e[cnt].w=w;}void dij(int s) { for1(i, 0, n) d[i]=oo; d[s]=0; ND t={s}; int u, v; q.push(t); while(q.size()) { u=q.top().id; q.pop(); for(int i=ihead[u]; i; i=e[i].next) if(d[v=e[i].to]>d[u]+e[i].w) { d[v]=d[u]+e[i].w; t.id=v; q.push(t); } }}int main() { read(n); read(m); read(T); int u, v, w; rep(i, m) { read(u); read(v); read(w); X[i]=u; Y[i]=v; W[i]=w; add(v, u, w); } int mx=0; dij(T); for1(i, 1, n) d1[i]=d[i]; cnt=0; CC(ihead, 0); rep(i, m) add(X[i], Y[i], W[i]); dij(T); for1(i, 1, n) { mx=max(mx, d1[i]+d[i]); } print(mx); return 0;}

 

 


 

 

Description

    农场有N(1≤N≤1000)个牛棚,每个牛棚都有1只奶牛要参加在X牛棚举行的奶牛派对.共有M(1≤M≤100000)条单向路连接着牛棚,第i条踣需要Ti的时间来通过.牛们都很懒,所以不管是前去X牛棚参加派对还是返回住所,她们都采用了用时最少的路线.那么,用时最多的奶牛需要多少时间来回呢?

Input

第1行:三个用空格隔开的整数.

 第2行到第M+1行,每行三个用空格隔开的整数:Ai, Bi,以及Ti.表示一条道路的起点,终点和需要花费的时间.

Output

唯一一行:一个整数: 所有参加聚会的奶牛中,需要花费总时间的最大值.

Sample Input

4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3

Sample Output

10

HINT

样例说明:

共有4只奶牛参加聚会,有8条路,聚会位于第2个农场.

第4只奶牛可以直接到聚会所在地(花费3时间),然后返程路线经过第1和第3个农场(花费7时间),总共10时间.

Source

转载地址:http://muxgx.baihongyu.com/

你可能感兴趣的文章
Flex中Number型去除空值(NaN)
查看>>
Chrome deep link打开app
查看>>
JMenuBar组件
查看>>
Cookie/Session机制详解
查看>>
KV型数据存储引擎Leveldb/lmdb/comdb /rocksdb
查看>>
安装配置Gradle,以及使用
查看>>
在DDMS中访问data目录【adb shell命令】
查看>>
JAVA 8 Stream小计
查看>>
用C读取INI配置文件 (可在linux平台上用)
查看>>
aspose实现Office转Pdf
查看>>
类与类之间的关系
查看>>
一个单词的记忆之旅
查看>>
安卓加载大图片学习笔记
查看>>
python 读写 json 文件
查看>>
Python获取当前路径下的配置文件
查看>>
伍雨霏-懂游戏的云服务如何保驾护航
查看>>
移动互联网商业发展前景广阔-CNNIC 高级分析师 喻重光
查看>>
【百度地图-安卓SDK】从头开始写android程序
查看>>
rxbus
查看>>
MonkeyRunner Command Summary
查看>>