昂贵的聘礼 POJ - 1062
2018-03-05 19:09
351 查看
中文题面
思路:卡在了等级限制
一开始只计算mindegreee及仅计算了最低等级。看了别人的题解才知道正确做法。
错误原因:列如
第一个搜索的点的地位为 5
地位限制为2
假设其访问到了地位为3的人,但应为仅限制了mindegree即——若需与地位为6人交易才能寻找到最短路,显然不满足题意
思路:
同时限制mindegree maxdegree
注意mindegree 初始值应为maxdegree-dlimit(满足地位限制) 最大值未酋长地位(最酋长的地位)
maxdegree初始值为酋长的地位
思路:卡在了等级限制
一开始只计算mindegreee及仅计算了最低等级。看了别人的题解才知道正确做法。
错误原因:列如
第一个搜索的点的地位为 5
地位限制为2
假设其访问到了地位为3的人,但应为仅限制了mindegree即——若需与地位为6人交易才能寻找到最短路,显然不满足题意
思路:
同时限制mindegree maxdegree
注意mindegree 初始值应为maxdegree-dlimit(满足地位限制) 最大值未酋长地位(最酋长的地位)
maxdegree初始值为酋长的地位
#include <iostream> #include <vector> #include <cstring> #include <queue> #include <cstdio> #define MAX_V 105 #define INF 1<<30 using namespace std; struct edge{ int v; int cost; }; vector<edge> G[MAX_V]; int V; bool inqueue[MAX_V]; int d[MAX_V]; int dlimit,degrees[MAX_V]; int mindegree,maxdegree; void spfa(int s){ for (int i = 0;i<=V;i++) d[i] = INF; memset(inqueue,0,sizeof inqueue); d[s] = 0; inqueue[s] = true; queue<int> Q; Q.push(s); while (!Q.empty()){ int u = Q.front(); Q.pop(); inqueue[u] = false; for (int i = 0;i<G[u].size();i++){ int v = G[u][i].v; if (degrees[v] < mindegree || degrees[v] > maxdegree) continue; if (d[u] + G[u][i].cost < d[v]){ d[v] = d[u] + G[u][i].cost; if (!inqueue[v]){ Q.push(v); } } } } } void init (){ scanf("%d%d",&dlimit,&V); for (int i = 0;i<=V;i++){ G[i].clear(); } for (int i = 1;i<=V;i++){ int cost,X; scanf("%d%d%d",&cost,°rees[i],&X); G[0].push_back(edge{i,cost}); for (int j = 0;j<X;j++){ int from,w; scanf("%d%d",&from,&w); G[from].push_back(edge{i,w}); } } } void solve(){ int mincost = INF; for (mindegree = degrees[1]-dlimit,maxdegree = degrees[1];mindegree<=degrees[1];mindegree++,maxdegree++){ spfa(0); mincost = min(mincost,d[1]); } printf("%d\n",mincost); } int main() { init(); solve(); return 0; }
相关文章推荐
- POJ 1062 昂贵的聘礼
- POJ-1062-昂贵的聘礼
- POJ 1062 昂贵的聘礼
- 【POJ1062】昂贵的聘礼 最短路 题目描述还有数据都坑爹
- 【Dijkstra】POJ1062-昂贵的聘礼
- poj-1062昂贵的聘礼-Bellman-F
- poj-1062-昂贵的聘礼
- POJ1062:昂贵的聘礼
- POJ 1062 昂贵的聘礼 最短路
- POJ1062 昂贵的聘礼, ZOJ1245 Best Deal
- poj1062 昂贵的聘礼interesting-
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
- [poj1062]昂贵的聘礼_最短路_离散化
- Poj OpenJudge 百练 1062 昂贵的聘礼
- POJ - 1062 昂贵的聘礼 Dijkstra
- POJ1062 昂贵的聘礼
- poj 1062 昂贵的聘礼
- 昂贵的聘礼(poj 1062)
- POJ 1062 昂贵的聘礼 Dijkstra
- poj 1062 昂贵的聘礼