POJ 3767 I Wanna Go Home
来源:互联网 发布:java阻塞队列使用场景 编辑:程序博客网 时间:2024/05/22 20:28
略水。。
题目大意是 有n个城市,要从 第1个城市 走到 第2个城市的最短路。。(起点是1, 终点是2),但是,每个城市都属于不同的领主。。
"For the sake of safety,", said Mr.M, "your route should contain at most 1 road which connects two cities of different camp.
要求你走的最短路中, 最多包含1条连接两个城市但却属于不同的领主的路。。
dijkstra算法,+多一个sum[]数组记录 有多少条连接两个城市但却属于不同的领主的路。。
#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<algorithm>#include<cmath>#include<queue>#include<vector>using namespace std;#define eps 1e-8#define mod 1000000007#define mnx 20005#define ll long long #define ull unsigned long long#define inf 0x3f3f3f3fint cost[mnx], first[mnx], vv[mnx], nxt[mnx], dis[mnx], lead[mnx], sum[mnx], e, m, n;bool vis[mnx];struct edge{int u, d;bool operator < (const edge &b) const {return d > b.d;}};void init(){memset(dis, 0x3f, sizeof(dis));memset(vis, 0, sizeof(vis));memset(first, -1, sizeof(first));memset(sum, 0, sizeof(sum));e = 0;}void add( int u, int v, int c ){cost[e] = c;vv[e] = v;nxt[e] = first[u];first[u] = e++;}void dijkstra(int s){priority_queue<edge> que;dis[s] = 0;edge q1; q1.u = s; q1.d = 0;que.push(q1);while( !que.empty() ){q1 = que.top(); que.pop();int u = q1.u;if( vis[u] ) continue;vis[u] = 1;for( int i = first[u]; i != -1; i = nxt[i] ){int v = vv[i];if( dis[v] > dis[u] + cost[i] ){if(lead[u] == lead[v] || (lead[u] != lead[v] && sum[u] + 1 < 2) ) { //注意条件。。 if( lead[u] != lead[v] ) sum[v] = sum[u] + 1; else sum[v] = sum[u]; dis[v] = dis[u] + cost[i]; edge q2; q2.d = dis[v], q2.u = v; que.push(q2);}}}}}int main(){while( scanf("%d", &n) && n ){init();scanf("%d", &m);int u, v, d;for( int i = 0; i < m; i++ ){scanf("%d%d%d", &u, &v, &d);add(u, v, d);add(v, u, d);}for( int i = 1; i <= n; i++ ){scanf("%d", &lead[i]);}dijkstra(1);if( dis[2] >= inf ) printf("-1\n");else printf("%d\n", dis[2]);}return 0;}
0 0
- POJ 3767 I Wanna Go Home
- POJ 3767 I Wanna Go Home
- poj 3767 I Wanna Go Home
- poj 3767 I Wanna Go Home
- POJ 3767 I Wanna Go Home
- poj 3767 I Wanna Go Home
- POJ 3767 I Wanna Go Home
- POJ 3767 I Wanna Go Home(Dijkstra)
- POJ - 3767 - I Wanna Go Home
- POJ 3767 I Wanna Go Home SPFA最短路
- POJ 3767 I Wanna Go Home 最短路
- poj 3767 I Wanna Go Home 最短路spfa
- POJ 3767 I Wanna Go Home【最短路floyd】
- POJ 3767I Wanna Go Home(最短路/Floyd)
- POJ 3767 I Wanna Go Home 笔记 最短路径
- I wanna go home
- POJ3767----I Wanna Go Home
- POJ 3767 I Wanna Go Home【最短路,Dijkstra+spfa,题意是关键呀】
- Node学习笔记——Linux系统下安装Node.js
- 222222222
- Windows编程菜鸟问题——宽字符与char型互相转换的问题
- rtp rtcp av sync
- 代码控制控件的layout_weight属性和结合xml填充屏幕
- POJ 3767 I Wanna Go Home
- [Mitbbs]FB的intern和准备的经历
- Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开。(为了把问题写清楚,标题一定要长长长........)
- 图的遍历:深度优先遍历
- 美团网盈利模式剖析
- HDU - 1142 A Walk Through the Forest
- C++前插法实现链表
- MFC菜单的命令更新机制
- struts标签库技巧