道路翻新 (Revamping Trails, USACO 2009 Feb)
2014-11-05 20:35
363 查看
题意:给定m<=50000的1-n有联通的图,求最多可以使K<=20条边变为0的情况下的最短路是多少。。
思路:简单的分层图最短路,对于每个点拆成K个点。。
然后求一边最短路。。
code:
View Code
思路:简单的分层图最短路,对于每个点拆成K个点。。
然后求一边最短路。。
code:
/* * Author: Yzcstc * Created Time: 2014/11/5 19:25:47 * File Name: revamp.cpp */ #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<string> #include<map> #include<set> #include<vector> #include<queue> #include<stack> #include<ctime> #define M0(x) memset(x, 0, sizeof(int) * (n+10)) #define MP make_pair #define x first #define y second using namespace std; typedef long long ll; typedef pair<ll, int> pii; const int maxn = 1200000; struct edge{ int v, w, next; } e[maxn * 5]; int last[maxn], tot; int n, k, m; void add(const int &u,const int &v, const int& w){ e[tot] = (edge){v, w, last[u]}; last[u] = tot++; } void init(){ int u, v, w; memset(last, -1, sizeof(int) * (n * k + 10)); tot = 0; for (int i = 0; i < m; ++i){ scanf("%d%d%d", &u, &v, &w); add(u, v, w); add(v, u, w); for (int i = 1; i <= k; ++i){ add(u + i * n, v + i * n, w); add(v + i * n, u + i * n, w); add(u + (i-1) * n, v + i * n, 0); add(v + (i-1) * n, u + i * n, 0); } } } ll dis[maxn]; int vis[maxn]; void dij(){ priority_queue<pii, vector<pii>, greater<pii> > q; int nt = n * k + n; memset(vis, 0, sizeof(vis)); for (int i = 1; i <= nt; ++i) dis[i] = (1LL<<50); pii tmp(0, 1); dis[1] = 0; q.push(tmp); int u, v; while (!q.empty()){ u = q.top().y; q.pop(); if (vis[u]) continue; vis[u] = 1; for (int p = last[u]; ~p; p = e[p].next){ v = e[p].v; if (dis[u] + e[p].w < dis[v]){ dis[v] = dis[u] + e[p].w; tmp.x = dis[v], tmp.y = v; q.push(tmp); } } } } void solve(){ dij(); ll ans = 1LL<<50; for (int i = 0; i <= k; ++i) ans = min(ans, dis[n+i*n]); cout << ans << endl; } int main(){ freopen("a.in", "r", stdin); freopen("a.out", "w", stdout); clock_t start, finish; start = clock(); while (scanf("%d%d%d", &n, &m, &k) != EOF){ init(); solve(); } finish = clock(); double t = (double)(finish - start) / CLOCKS_PER_SEC; // printf("time = %.6f\n", t); return 0; }
View Code
相关文章推荐
- 【USACO】2009 Feb Revamping Trails 道路翻新
- USACO 2009 Feb Revamping Trails 道路翻新
- BZOJ1579: [Usaco2009 Feb]Revamping Trails 道路升级
- BZOJ1579 [Usaco2009 Feb]Revamping Trails 道路升级
- bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级【分层图+spfa】
- BZOJ1579: [Usaco2009 Feb]Revamping Trails 道路升级
- [Usaco2009 Feb]Revamping Trails 道路升级 BZOJ1579
- 【BZOJ】1579: [Usaco2009 Feb]Revamping Trails 道路升级
- bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级
- [BZOJ1579][Usaco2009 Feb]Revamping Trails 道路升级(二维最短路问题)
- 【BZOJ 1579】 1579: [Usaco2009 Feb]Revamping Trails 道路升级 (最短路)
- bzoj1579 [Usaco2009 Feb]Revamping Trails 道路升级 分层图dij+heap
- BZOJ 1579: [Usaco2009 Feb]Revamping Trails 道路升级( 最短路 )
- 【bzoj1579】[Usaco2009 Feb]Revamping Trails 道路升级
- BZOJ 1579: [Usaco2009 Feb]Revamping Trails 道路升级 分层图最短路
- Bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 dijkstra,堆,分层图
- BZOJ1597 [Usaco2009 Feb]Revamping Trails 道路升级
- bzoj1579 [Usaco2009 Feb]Revamping Trails 道路升级
- bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级——分层图+dijkstra
- BZOJ_1579_[Usaco2009 Feb]Revamping Trails 道路升级_分层图最短路