nyoj711&&zznu1624 最舒适的路线(第六届河南省程序设计大赛 广搜)
来源:互联网 发布:张予曦开的淘宝店 编辑:程序博客网 时间:2024/04/30 21:17
上次用了并查集的方法A了 这次用广搜试试~
难点就在于两个点之间可能有多条路线。
在这里我用了edge[x][y]数组标记x--y这条边出现的次数。每遍历一次就减一,成功ac
#include <stdio.h>#include <vector>#include <math.h>#include <queue>#include <string.h>using namespace std;#define inf 0x3fffffffstruct node{int pos;//当前顶点 int pre;//和当前顶点相连的另外一个顶点 double val;double max; double min;double p;friend bool operator<(node a,node b){return a.p>b.p;}};vector<node>map[505];int S,T;int edge[505][505];int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);}void bfs(){priority_queue<node>s;node node1,node2;node1.pos=S;node1.max=-inf;node1.min=inf,node1.p=1,node1.pre=S;edge[S][S]++;s.push(node1);double MAX=-inf,MIN=inf,P=inf;int POS;while(!s.empty()){node1=s.top();s.pop();if(!edge[node1.pre][node1.pos]) continue;edge[node1.pre][node1.pos]--;edge[node1.pos][node1.pre]--;if(node1.pos==T) {POS=node1.pos;if(P>node1.p){MAX=max(MAX,node1.max);MIN=min(MIN,node1.min);P=node1.p;}}for(int i=0;i<map[node1.pos].size();i++){node temp=map[node1.pos][i];if(edge[node1.pos][temp.pos]){if(temp.val>node1.max) temp.max=temp.val;else temp.max=node1.max;if(temp.val<node1.min) temp.min=temp.val;else temp.min=node1.min;//printf("%d %d %lf %lf %lf\n",temp.pos,node1.pos,temp.max,temp.min,temp.val);temp.p=temp.max/temp.min;s.push(temp);}}}while(!s.empty()) s.pop();if(POS==T){if(P-floor(P)==0){printf("%.lf\n",P);}else{int x=(int)MAX;int y=(int)MIN;int r=gcd(x,y);printf("%d/%d\n",x/r,y/r);}}else{printf("IMPOSSIBLE\n");}}int main(){int k;//freopen("in.txt","r",stdin);scanf("%d",&k);while(k--){int n,m;memset(edge,0,sizeof(edge));memset(map,0,sizeof(map));scanf("%d %d",&n,&m);for(int i=0;i<m;i++){int x,y;node temp;double v;scanf("%d %d %lf",&x,&y,&v);temp.pos=x;temp.val=v;temp.pre=y;map[y].push_back(temp);temp.pos=y;temp.pre=x;map[x].push_back(temp);edge[x][y]++;edge[y][x]++;}scanf("%d %d",&S,&T);bfs();}return 0;}
1 0
- nyoj711&&zznu1624 最舒适的路线(第六届河南省程序设计大赛 广搜)
- nyoj 711最舒适的路线(第六届河南省程序设计大赛 并查集)
- 第六届程序设计大赛 T3 最舒适的路线(并查集)
- nyoj711最舒适的路线 (枚举 + 并查集 )
- 第六届河南省赛 最舒适的路线【并查集】
- 最舒适的路线 第六届
- 第六届河南省程序设计大赛
- 第六届河南省程序设计大赛
- 第六届河南省赛 zzulioj 1483: 最舒适的路线 (并查集)好题 nyoj 711
- 河南省第六届程序设计大赛--Card Trick
- 最舒适的路线
- 河南省第六届程序设计大赛——异形卵
- nyoj714 Card Trick(第六届河南省程序设计大赛)
- nyoj 716 River Crossing 第六届河南省程序设计大赛
- nyoj-最舒适的路线
- 河南省第八届程序设计大赛 最短路Dijkstra 最小换乘+
- 第五届河南省程序设计大赛
- 第三届河南省程序设计大赛
- 用jstl标签截取从后台获取的url扩展名拼接到src里
- sublime + cocos lua
- 虚拟机三种网络模式(桥接、NAT、Host-only)
- STRUTS系列之 Action配置
- poj 3468 线段树 lazy标记模板
- nyoj711&&zznu1624 最舒适的路线(第六届河南省程序设计大赛 广搜)
- PHP7和HHVM的性能之争
- 一种局部ui界面切换解决方案
- session 入库
- java数据结构与算法分析学习2(泛型)
- Extjs替换自带theme
- 泛型在Web中的作用
- springMVC–参数绑定常用的注解
- 在Linux下安装配置JDK