Pandaland HDU
来源:互联网 发布:网络信息管理平台 编辑:程序博客网 时间:2024/05/23 02:03
题目传送门
题意:给你m条边,然你从中选择边构成一个权值最小的环。
思路:暴力枚举每一条边然后把两个点设为起点终点然后Dijkstra就可以,不要忘记剪枝。
PS:这个题emmm,很早就想出来了,但是Dijkstra写错了然后找了一天的错脑子是个好东西可惜我没有。
#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <fstream>#include <iostream>#include <list>#include <map>#include <queue>#include <set>#include <sstream>#include <stack>#include <string>#include <vector>#define MAXN 10010#define MAXE 210#define INF 100000000#define MOD 1000000007#define LL long long#define pi acos(-1.0)using namespace std;struct Node { int x; int y; int id; bool operator<(const Node &p) const { if (x == p.x) return y < p.y; return x < p.x; }};struct Edge { int to; int cost; bool operator<(const Edge &p) const { return cost > p.cost; }};int dis[MAXN];bool vis[MAXN];vector<Edge> vec[MAXN];set<Node> Set;int cnt;int ans;void dij(int s) { priority_queue<Edge> que; for (int i = 0; i <= cnt + 1; ++i) { dis[i] = INF; } dis[s] = 0; memset(vis, false, sizeof(vis)); que.push((Edge){s, 0}); while (!que.empty()) { Edge p = que.top(); que.pop(); if (p.cost > ans) { return; } if (dis[p.to] < p.cost) { continue; } if (vis[p.to]) { continue; } vis[p.to] = true; for (int i = 0; i < vec[p.to].size(); ++i) { Edge temp = vec[p.to][i]; if (dis[temp.to] > dis[p.to] + temp.cost) { dis[temp.to] = dis[p.to] + temp.cost; que.push((Edge){temp.to, dis[temp.to]}); } } }}int main() { std::ios::sync_with_stdio(false); int T; cin >> T; for (int kase = 1; kase <= T; ++kase) { memset(vec, 0, sizeof(vec)); Set.clear(); int n; cin >> n; int x1, y1, x2, y2, cost; cnt = 0; for (int i = 0; i < n; ++i) { cin >> x1 >> y1 >> x2 >> y2 >> cost; int id1, id2; if (Set.count((Node){x1, y1})) { id1 = Set.find((Node){x1, y1})->id; } else { cnt++; Set.insert((Node){x1, y1, cnt}); id1 = cnt; } if (Set.count((Node){x2, y2})) { id2 = Set.find((Node){x2, y2})->id; } else { cnt++; Set.insert((Node){x2, y2, cnt}); id2 = cnt; } vec[id1].push_back((Edge){id2, cost}); vec[id2].push_back((Edge){id1, cost}); } ans = INF; for (int i = 1; i <= cnt; ++i) { for (int j = 0; j < vec[i].size(); ++j) { int temp_cost = vec[i][j].cost; vec[i][j].cost = INF; for (int k = 0; k < vec[vec[i][j].to].size(); ++k) { if (vec[vec[i][j].to][k].to == i) { vec[vec[i][j].to][k].cost = INF; break; } } dij(i); ans = min(ans, temp_cost + dis[vec[i][j].to]); } } cout << "Case #" << kase << ": "; if (ans >= INF) { cout << 0 << endl; } else { cout << ans << endl; } } return 0;}
阅读全文
0 0
- Pandaland HDU
- Pandaland HDU
- HDU 6005 Pandaland
- hdu 6005 Pandaland(dij+暴力)
- HDU 6005 Pandaland(dijkstra + 剪枝)
- HDU 6005 Pandaland——dijkstra + 剪枝
- HDU 6005 Pandaland[最小生成树][LCA]
- 【最小环 && 离散化】HDU 6005 Pandaland
- HDU 6005 Pandaland 最小环(最小生成树+LCA)
- HDU 6005 Pandaland(无向图最小环)
- HDU6005-Pandaland
- Hdu 6005 Pandaland 无向图最小环:最短路剪枝
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- mysql常用命令
- arcgis for js之描点
- 【笔试集锦】多益网络二笔
- (欧)第15章 设计模式与软件测试
- React Native 源码导读(零) – 创建/运行/调试
- Pandaland HDU
- 文本排序的王者:玩透sort命令
- ajax编程的基本步骤
- POJ 2484 简单博弈
- 1285: Vegetable and Road again [最小生成树]
- 置换群Polya定理(poj 2409: Let it Bead)
- uva 11549
- 通过js写一个轮播图
- 上海证券交易所PBU升位历史