zoj1665 dij变形

既然输入的是损坏率,那1-x就是剩余的。最后只要剩余的最大。

#include<stdio.h>
#include<string.h>
#define Max 99999999
const int maxn=1003;
double dis[maxn],map[maxn][maxn];
int vis[maxn],n,val[maxn];
void init()
{
    int i,j;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(i==j)
                map[i][j]=0;
            else map[i][j]=0;
}
void dij()
{
    int i,j,pos;
    pos=n;
    memset(vis,0,sizeof(vis));
    for(i=1;i<=n;i++)
        dis[i]=0;
    dis[pos]=1;
//    vis[pos]=1;
    for(i=1;i<=n;i++)
    {
        double min=-Max;
        for(j=1;j<=n;j++)
        {
            if(!vis[j]&&min<dis[j])
            {
                pos=j;
                min=dis[j];
            }
        }
        vis[pos]=1;
        for(j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[j]<map[pos][j]*dis[pos])
                dis[j]=map[pos][j]*dis[pos];
        }
    }
}
int main()
{
    int i,j,m;
    double cost;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        init();
        for(i=1;i<n;i++)
            scanf("%d",&val[i]);
        for(i=1;i<=m;i++)
        {
            int x,y;
            scanf("%d%d%lf",&x,&y,&cost);
            if(map[x][y]<1-cost)
                map[x][y]=map[y][x]=1-cost;
        }
        /*for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                printf("%.2lf ",map[i][j]);
            }
            printf("\n");
        }*/
        double ans=0;
        dij();
        /*for(i=1;i<=n;i++)
            printf("%d ",dis[i]);
        printf("\n");*/
        for(i=1;i<n;i++)
            ans+=val[i]*dis[i];
        printf("%.2lf\n",ans);
    }
}
时间: 2024-09-20 16:42:56

zoj1665 dij变形的相关文章

zoj1655 最短路变形

题意:HERO过的首都需要货物,需要从其他的城市吧货物送到首都,每条道路都会需要消耗一定比例的货物,问最多能送多少货物到首都. 思路:如果每个点的比例是1,到达首都的比例就是经过的路径的(1-消耗比)的乘积,反正是无向的,所以可以反过来推,首都的货物比是1,而到达每座 城市的货物就是所经过的路径(1-消耗比)的乘积,则由此可见,我们可以求首都到任意城市的最大比值:最后把每个点的最大比值乘以每个点的货物加起来 即是结果. #include<stdio.h> #include<string.

HN0I2000最优乘车 (最短路变形)

HN0I2000最优乘车 (最短路变形) [试题]为了简化城市公共汽车收费系统,某城市决定对大部分的公共汽车都采用一票制,但由于某些公共汽车所经过的停车站太多和路途太长,就采用两票或多票制.经过这种票制改革后,人们坐公共汽车从一个站到另一个站时,就不得不选择一个好的乘车方案,以使他们的乘车费用最低. 为了方便于求出最佳的乘车方案,我们假设: l  采用一票制的公共汽车,无论从哪个站上车到那个站下车,乘该公共汽车的费用为1(费用单位). l  采用多票制的公共汽车,将设立某些站为关键站:那么,如果

poj 3463 Sightseeing (dij 求最短路和次短路并计数)

dijkstra求最短路和次短路的求法和计算  模板 dijkstra求最短路的变形. 外循环要循环2*n-1次,因为dis[n][2]有2*n个状态,而dis[s][0]已经用过一次. 算法: 1.如果比最短路短就更新最短路和次短路. 2.如果和最短路相等,更新最短路的计数. 3.如果和次短路相等,更新次短路的方法数. 4.如果比次短路短,更新次短路. #include<cstdio> #include<iostream> #include<cstring> #inc

poj 2253 dijstra变形

dijstra算法的变形,定义:dist[i]为源点到点i的若干路径上的边的最大值的最小值,然后会发现可以用和dijstra一样的贪心方法,当前dist最小的以后都不会再被更新. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cmath> 5 using namespace std; 6 7 const int INF = 9999999; 8 const

hdu5361(2015多校6)--In Touch(变形的dijkstra)

题目链接:点击打开链接 题目大意:给出一个n个数的序列,标号为1到n,对于第i个数,它可以移动到距离i为[ li,ri ]的位置,花费为c[i],输入三行,第一行l[i],第二行r[i],第三行c[i],现在问对于第一个数来说,它移动到第i个位置的最小花费.(1<=i<=n) 这是一个每个点可以移动到一段中任意一个点,并且花费一样,这样就不适用与已有的四种最短路,但是可以对dijkstra进行变形,dij是每次找到一个距离最小的节点,用这个节点去更新其它节点,我们可以用一个优先队列,每次找到一

【lightoj-1002】Country Roads(dijkstra变形)

light1002:传送门 [题目大意] n个点m条边,给一个源点,找出源点到其他点的‘最短路’ 定义:找出每条通路中最大的cost,这些最大的cost中找出一个最小的即为‘最短路’,dijkstra变形.dis[i]为s->i的‘最短路’ 1 #include<bits/stdc++.h> 2 int mp[505][505],dis[505],vis[505]; 3 using namespace std; 4 int n; 5 void dij(int s) 6 { 7 int i

Heavy Transportation POJ 1797 最短路变形

Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你求从编号为1的城市到编号为n的城市的路线中,最大能经过多重的车. 解题思路 这个题可以使用最短路的思路,不过转移方程变了\(dis[j]=max(dis[j], min(dis[u], e[u][j]))\).这里dis[j]表示从标号为1的点到达编号为j的点的路径中,最小的承重能力,就像短板效应样

UVA 562 Dividing coins --01背包的变形

01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define N 50007 int c[102],d

css3变形 过渡 动画

CSS3 变形/变换 相关属性 transform 设置或检索对象的检索(none 2D 3D) transform-origin:设置或检索对象以某个原点进行检索 transform-style: flat(默认)指定子元素位于次元素所在平面内/preserve-3d 指定子元素定位在三维空间内 perspective: 长度单位 指定观察者距离平面的距离 perspective-origin 指定观察者的位置 left/right/center backface-visibialbe: vi