本题思路:对原图和原图的逆图分别用一次最短路,找出最大值即可。

一开始是我是对每个顶点spfa搜了一波,结果判题时间巨长,还好这个题的数据量不是很大,所以就用了另一种思路。

  参考代码:spfa单结点爆搜版

 #include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std; const int maxn = + , INF = 0x3f3f3f3f;
struct edge {
int to, cost;
};
int n, m, x, ans, dist[maxn];
vector<edge> G[maxn];
bool vis[maxn]; void addedge(int u, int v, int w) {
G[u].push_back({v, w});
} int spfa(int source, int aid) {
memset(vis, false, sizeof vis);
for(int i = ; i <= n; i ++)
dist[i] = (i == source ? : INF);
queue <int> Q;
Q.push(source);
vis[source] = true;
while(!Q.empty()) {
int now = Q.front();
Q.pop();
for(int i = ; i < G[now].size(); i ++) {
edge e = G[now][i];
if(dist[e.to] > dist[now] + e.cost) {
dist[e.to] = dist[now] + e.cost;
if(!vis[e.to]) Q.push(e.to);
}
}
}
return dist[aid];
} int main () {
ans = ;
int u, v, w;
cin >> n >> m >> x;
for(int i = ; i <= m; i ++) {
cin >> u >> v >> w;
addedge(u, v, w);
}
for(int i = ; i <= n; i ++)
ans = max(spfa(i, x) + spfa(x, i), ans);
cout << ans << endl;
return ;
}

  对原图和逆图分别进行一次Dijkstra的终极版本

 #include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std; const int maxn = + , INF = 0x3f3f3f3f;
struct edge {
int to, cost;
};
int n, m, x, k, ans, dist1[maxn], dist2[maxn], G[maxn][maxn];;
bool vis[maxn]; void Dijkstra(int lowcost[]) {
for(int i = ; i <= n; i ++)
lowcost[i] = INF;
lowcost[x] = ;
memset(vis, false, sizeof vis);
for(int i = ; i <= n; i ++) {
int minf = INF;
for(int j = ; j <= n; j ++)
if(minf > lowcost[j] && !vis[j]) {
k = j;
minf = lowcost[j];
}
vis[k] = true;
for(int j = ; j <= n; j ++)
if(!vis[j] && lowcost[j] > lowcost[k] + G[k][j])
lowcost[j] = lowcost[k] + G[k][j];
}
} int main () {
ans = ;
int u, v, w;
cin >> n >> m >> x;
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
if(i == j) G[i][j] = ;
else G[i][j] = INF;
for(int i = ; i <= m; i ++) {
cin >> u >> v >> w;
G[u][v] = min(G[u][v], w);
}
Dijkstra(dist1);
for(int i = ; i <= n; i ++)
for(int j = ; j < i; j ++)
if(G[i][j]) swap(G[i][j], G[j][i]);
Dijkstra(dist2);
for(int i = ; i <= n; i ++)
ans = max(ans, dist1[i] + dist2[i]);
cout << ans << endl;
return ;
}

POJ-3268.SilverCowParty.(最短路 + 图的转置)的更多相关文章

  1. POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】

    Silver Cow Party Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Su ...

  2. POJ 3268 Silver Cow Party 最短路—dijkstra算法的优化。

    POJ 3268 Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbe ...

  3. DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards

    题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...

  4. POJ 3268 Silver Cow Party (最短路径)

    POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...

  5. POJ 1161 Walls(最短路+枚举)

    POJ 1161 Walls(最短路+枚举) 题目背景 题目大意:题意是说有 n个小镇,他们两两之间可能存在一些墙(不是每两个都有),把整个二维平面分成多个区域,当然这些区域都是一些封闭的多边形(除了 ...

  6. [NOIP2017]逛公园 最短路图 拓扑序DP

    ---题面--- 题解: 挺好的一道题. 首先我们将所有边反向,跑出n到每个点的最短路,然后f[i][j]表示从i号节点出发,路径长比最短路大j的方案数. 观察到,如果图中出现了0环,那么我们可以通过 ...

  7. 【NOIP2017】逛公园(最短路图,拓扑排序,计数DP)

    题意: 策策同学特别喜欢逛公园. 公园可以看成一张 N 个点 M 条边构成的有向图,且没有自环和重边.其中 1 号点是公园的入口, N 号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花 ...

  8. [JZOJ5279]香港记者题解--最短路图

    [JZOJ5279]香港记者题解--最短路图 题目链接 过 于 暴 力 分析 有一个naiive的想法就是从1到n跑最短路,中途建图,然后在图上按字典序最小走一遍,然而·这是不行的,你这样跳不一定能跳 ...

  9. Aizu - 1383 Pizza Delivery (最短路图+DAG上的割边)

    题意:给出一张有向图,每条边有长度,对于每条边,你要回答将该边的方向取反后,从起点到终点的最短距离是增加or减小or不变. 首先求出起点到所有点的最短距离和所有点到终点的最短距离(两次DIjkstra ...

随机推荐

  1. Mybatis Update操作返回值问题

    https://www.cnblogs.com/jpfss/p/8918315.html

  2. Django请求流程图

    Django请求流程图

  3. Amundsen — Lyft’s data discovery & metadata engine

    转自:https://eng.lyft.com/amundsen-lyfts-data-discovery-metadata-engine-62d27254fbb9 In order to incre ...

  4. 监控端口是否开放,端口未开放关闭虚拟ip,端口开放启动虚拟IP

    #!/bin/bash#该脚本监控本机的一个端口,当端口异常时,停止lvs的本地ip直到恢复.该脚本依托于lvs.sh启动脚本#目前只支持监控1个vip #定义常用变量#配置检查的ip以及端口chec ...

  5. kafka-producer配置

    kafka-producer版本对比 Kafka的producer的API根据版本的不同分为kafka0.8.1.X之前的 kafka.javaapi.producer.Producer.以及之后版本 ...

  6. Java高级特性 第6节 注解初识

    一.注解概述 Java注解也就是Annotation,是Java代码里的特殊标记,它为Java程序代码提供了一种形式化的方法,用来表达额外的某些信息,这些信息是代码本身无法表示的. 注解以标签的形式存 ...

  7. py-day3-3 python 函数的作用域

    def test1(): print('in the test1') def test(): print('in the test') return test1 print(test) res = t ...

  8. 学习vue容易忽视的细节

    1.对于自定义标签名(组件名称),Vue.js 不强制要求遵循 W3C 规则 (小写,并且包含一个短杠),尽管遵循这个规则比较好.HTML 特性是不区分大小写的.所以,当使用的不是字符串模板,came ...

  9. 2017-07-06 eclipse在线安装SVN1.9插件

    1,百度搜索subeclipse,点击第一个: 2,官网说,文档已移动到github wiki上: 3,打开github wiki,复制最新发布版本地址: 4,在eclipse里面,打开help-&g ...

  10. tomcat窗口一闪而过

    当点击bin/startup.bat,出现黑窗口一闪而过时,肯定是因为tomcat启动报错了. 错误排查方法 首先检查java环境变量是否设置正确. 其次调试tomcat,需要修改startup.ba ...