POJ 3268 Silver Cow Party
题目链接
题意
单向图,N - 1个牛去聚会,求所有牛去聚会和回家路径和的最大值
AC
- 很骚的操作
首先从派对的地方跑Dijkstra求出回家的最短路,然后将所有边翻转再次从聚会跑Dijkstra就是所有牛到聚会的最短路
一共跑 2 个Dijkstra
using namespace std;
int inf = 0x3f3f3f3f;
int g[N][N];
int temp[N], dis[N];
bool vis[N];
bool vis_c[N][N];
void Dijkstra(int start, int n) {mem(dis, inf);mem(vis, false);dis[start] = 0;for (int i = 1; i <= n; ++i) {int MIN = inf, u = -1;for (int j = 1; j <= n; ++j) {if (vis[j]) continue;if (dis[j] < MIN) {MIN = dis[j];u = j;}}if (u == -1) return;vis[u] = true;for (int j = 1; j <= n; ++j) {if (g[u][j] == inf || vis[j]) continue;if (dis[j] > dis[u] + g[u][j]) {dis[j] = dis[u] + g[u][j];}}}
}int main(){
// freopen("in.txt", "r", stdin);int n, m, x;cin >> n >> m >> x;mem(g, inf);for (int i = 0; i < m; ++i) {int u, v, c;cin >> u >> v >> c;g[u][v] = min(g[u][v], c);}// 牛回家的最短路Dijkstra(x, n);for (int i = 1; i <= n; ++i) {temp[i] = dis[i];}// 翻转边mem(vis_c, false);for (int i = 1; i <= n; ++i) {for (int j = 1; j <= n; ++j) {if (g[i][j] != inf && vis_c[i][j] == false) {swap(g[i][j], g[j][i]);vis_c[j][i] = vis_c[i][j] = true;}}}// 牛去派对的最短Dijkstra(x, n);int ans = 0;for (int i = 1; i <= n; ++i) {temp[i] += dis[i];ans = max(ans, temp[i]);}cout << ans << endl;return 0;
}
- 堆优化Dijkstra
一共跑N + 1 个Dijkstra
using namespace std;
int inf = 0x3f3f3f3f;
struct ac{int v, c;
};
vector<ac> g[N];
int dis[N], temp[N];
bool vis[N];
void Dijkstra(int start, int n) {mem(dis, inf);mem(vis, false);dis[start] = 0;priority_queue<P, vector<P>, greater<P> > que;que.push(P(0, start));while (!que.empty()) {P f = que.top();int v = f.second;int c = f.first;que.pop();if (dis[v] < c || vis[v]) continue;vis[v] = true;for (int j = 0; j < g[v].size(); ++j) {ac t = g[v][j];if (vis[t.v]) continue;if (dis[t.v] > c + t.c) {dis[t.v] = c + t.c;que.push(P(dis[t.v], t.v));}}}}int main(){// freopen("in.txt", "r", stdin);int n, m, x;cin >> n >> m >> x;for (int i = 0; i < m; ++i) {int u, v, c;cin >> u >> v >> c;g[u].push_back((ac){v, c});}// 牛回家的最短路Dijkstra(x, n);for (int i = 1; i <= n; ++i) {temp[i] = dis[i];}int ans = 0;// 每个牛去聚会的最短路for (int i = 1; i <= n; ++i) {if (i == x) continue;Dijkstra(i, n);temp[i] += dis[x];ans = max(temp[i], ans);}cout << ans << endl;return 0;
}
POJ 3268 Silver Cow Party相关推荐
- POJ 3268 Silver Cow Party (最短路径)
POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...
- [POJ](3268)Silver Cow Party ---最短路径(图)
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 23762 Accepted: 1085 ...
- POJ - 3268 Silver Cow Party(最短路)
题目链接:点击查看 题目大意:给出n个点以及m条单项路径和一个点x,设从x点到i的距离及从i回到x点的距离分别为d1和d2,求d1+d2的最大值(1<=i<=n) 题目分析:看到这个题的第 ...
- POJ 3268 Silver Cow Party--正反Dijkstra
- 【POJ】3268 Silver Cow Party (将有向图的边反转)
问题链接:http://poj.org/problem?id=3268 [问题描述] One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- 【POJ】3268 Silver Cow Party
题目链接:http://poj.org/problem?id=3268 题意 :有N头奶牛,M条单向路.X奶牛开party,其他奶牛要去它那里.每头奶牛去完X那里还要返回.去回都是走的最短路.现在问这 ...
- POJ 3268 D-Silver Cow Party
http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- D - Silver Cow Party POJ - 3268
D - Silver Cow Party POJ - 3268 dijkstra 是 O(n2),堆优化一下, O(nlogn) 对每个点跑一次 dj, 取 max(dis(x->i)+dis( ...
- Silver Cow Party (POJ - 3268 )
Silver Cow Party (POJ - 3268 ) 这道题是我做的最短路专题里的一道题,但我还没做这个,结果比赛就出了,真是.......... 题目: One cow from each ...
最新文章
- Python之Scrapy爬虫的常用命令
- NIO框架之MINA详解
- java 数组 参数 ppt,Java自学课件-数组.ppt
- android 星级评论,Android自定义RatingBar(星级评分控件)
- python 多进程与多线程配合拷贝文件目录
- 跟几个程序员聊了聊他们的每月薪资收入
- Java 7 对ArrayList和HashMap的性能的提升
- MyEclipse 9.0的激活机制
- stm32f407 6路串口dma如何配置_stm32cubeMX学习十、扫码模块程序开发(基于正点原子STM32F407开发板)...
- android wheel控件滚动,android 滚动选择插件 android-wheel
- html字体版权,字体在网站中的版权问题
- linux服务网卡速率查看,linux 下查看网卡工作速率
- python用函数判断一个数是否为素数,python分享是否为素数 python输入并判断一个数是否为素数...
- Android相对布局
- 【C语言练习——打印正方形及其变形】
- ARM到底是冯诺依曼结构还是哈佛结构?
- 《袁老师访谈录》第九期丨陈家强教授/香港科大商学院前院长【问诊未来·院长系列:科技铺就金融创新之路】...
- python asyncio_python中asyncio模块
- 2021年上半年总结
- 网盘防和谐姿势①:压缩包篇