POJ 2472 &&ZOJ 2797 (106 miles to Chicago)

链接:click here

题意:

Elwood和Jack要从the Palace Hotel(顶点1)尽量躲避警察的追捕,驾车到Chicago(顶点n)。现在有n个顶点,m条边,给出在每条边上不被警察追捕到的几率,问最终Elwood和Jack能安全到达Chicago而不被警察追捕到的最大概率是多少。

思路:就是求从起点到终点的最小概率 floyd 算法(也可以用逆向的dijkstra要求的不是最小的,而是最大的。),涉及到概率,注意一下精度。

参考代码;

#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
double cost[101][101];
int i,j,k,m,n,x,y,p;
void floyd()
{
    for(k=1; k<=n; k++)
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                if(cost[i][j]<cost[i][k]*cost[k][j]) //注意是乘法
                    cost[i][j]=cost[i][k]*cost[k][j];

}
void init()
{
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
        {
            if(i==j) cost[i][j]=1;
            else
                cost[i][j]=0;
        }
}
void read()
{
    scanf("%d",&m);
    for(i=1; i<=m; i++)
    {
        scanf("%d%d%d",&x,&y,&p);
        cost[x][y]=cost[y][x]=(double)p/100;
    }
}
int main()
{
    while(cin>>n&&n)
    {
        init();
        read();
        floyd();
        printf("%.6lf percent\n",cost[1][n]*100);
    }
    return 0;
}
时间: 2024-10-11 23:30:06

POJ 2472 &&ZOJ 2797 (106 miles to Chicago)的相关文章

zoj 3231(上下界费用流)

题意:树上每个节点上有若干苹果,边上带权,问你最小费用使得书上的苹果方差最小. 思路:上下费用流问题,参考http://blog.csdn.net/qq564690377/article/details/8870587 代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last m

poj 2777 Count Color(线段树区间修改)

题目链接:http://poj.org/problem?id=2777 题目意思:就是问你在询问的区间里有几种不同的颜色 思路:这题和一般的区间修改差不多,但是唯一不同的就是我们要怎么计算有种颜色,所以这时候我们就需要把延时标记赋予不同的意义,当某段区间有多种颜色时就赋值为-1,当为一种颜色时就把它赋值为这个颜色的号数.这儿我们要怎么统计询问区间不同的颜色数叻,为了不重复计算同一种颜色,那么我们就需要用一个数组来标记计算过的颜色,当我们下次遇到时就不需要再次计算了.... 代码核心处就在计数那儿

POJ 1984 Navigation Nightmare (数据结构-并查集)

Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 4072   Accepted: 1615 Case Time Limit: 1000MS Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40,000), usually numbered/labeled 1..N. A series o

poj 2274 The Race(逆序数+线段树)

The Race Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 3237   Accepted: 664 Case Time Limit: 3000MS Description During the Annual Interstellar Competition for Tuned Spaceships, N spaceships will be competing. Each spaceship i is tuned

POJ 1696 Space Ant(点积的应用)

Space Ant 大意:有一只蚂蚁,每次都只向当前方向的左边走,问蚂蚁走遍所有的点的顺序输出.开始的点是纵坐标最小的那个点,开始的方向是开始点的x轴正方向. 思路:从开始点开始,每次找剩下的点中与当前方向所形成的夹角最小的点,为下一个要走的点(好像就是犄角排序,我不是很会),夹角就是用点积除以两个向量的距离,求一下acos值. 之前一直用叉积做,做了好久样例都没过,发现用错了... 题目挺好的,有助于理解点积与叉积 1 struct Point{ 2 double x, y; 3 int id

ZOJ 2833-Friendship(并查集+优化)

Friendship Time Limit: 3 Seconds      Memory Limit: 32768 KB A friend is like a flower, a rose to be exact, Or maybe like a brand new gate that never comes unlatched. A friend is like an owl, both beautiful and wise. Or perhaps a friend is like a gho

poj 2449 Remmarguts&#39; Date(K短路,A*算法)

http://poj.org/problem?id=2449 大致题意:给出一个有向图,求从起点到终点的第K短路. K短路与A*算法详解  学长的博客... 算法过程 #include <stdio.h> #include <iostream> #include <algorithm> #include <set> #include <map> #include <vector> #include <math.h> #in

POJ 3613 Cow Relays (floyd + 矩阵快速幂)

题目大意: 求刚好经过K条路的最短路 我们知道如果一个矩阵A[i][j] 表示表示 i-j 是否可达 那么 A*A=B  B[i][j]  就表示   i-j 刚好走过两条路的方法数 那么同理 我们把i-j 的路径长度存到A 中. 在A*A的过程中,不断取小的,那么最后得到的也就是i - j 走过两条路的最短路了. 当然也是利用到了floyd的思想. 然后要求出K次的最短路,那么就是矩阵快速幂的工作了. 注意要离散化.用map #include <cstdio> #include <io

POJ 3253 Fence Repair(哈夫曼树)

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 26167   Accepted: 8459 Description Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000)