zoukankan      html  css  js  c++  java
  • csu 1978: LXX的图论题

    1978: LXX的图论题

            Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 71     Solved: 27    


    Description

    由于lxx的图论和数据结构太弱了,大佬Z决定为lxx补一补。于是大佬Z为lxx出了一道题目,题目如下:给出一张有向图,图中有n个点,m条边,每条边上都有一个权值w,问图中是否存在满足以下条件的点i,j,...p使得不等式w[i][j] * w[j][k] * .... * w[p][i]<1成立。奈何lxx太弱了,他决定寻求你的帮助。

    Input

    多组输入,以文件结尾。第一行两个整数n( 1<=n<=500 ),m( 1<=m<=n*(n-1)/2 ),接下来m行,每行3个数x,y,z,(x≠y):表示x到y有一条边,权值为z(0<z<20,且保证z小数点后面最多只有一位)。

    Output

    如果存在满足题目所描述的式子,输出“YES”,否则输出“NO”。

    Sample Input

    2 2
    1 2 0.9
    2 1 1.2
    6 4
    1 2 0.1
    2 4 0.8
    4 1 12
    4 1 15

    Sample Output

    NO
    YES

    Hint

    点的编号为1~n

    Source

    2017年8月月赛

    Author

    廖璇璇

    题解:

    直接floyd一次

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <algorithm>
     6 #define INF 0x4f4f4f
     7 using namespace std;
     8 double mp[510][510];
     9 double dist[510][510];
    10 int n,m;
    11 double floyd()
    12 {
    13     int i,j,k;
    14     double minn=999999.0;
    15     for(k=1; k<=n; k++)
    16     {
    17         for(i=1; i<=n; i++)
    18             for(j=1; j<=n; j++)
    19             {
    20                 if(dist[i][j]>dist[i][k]*dist[k][j])
    21                 {
    22                     dist[i][j]=dist[i][k]*dist[k][j];
    23                 }
    24             }
    25     }
    26     for(i=1; i<=n; i++)
    27        minn=min(minn,dist[i][i]);
    28     return minn;
    29 }
    30 int main()
    31 {
    32     int s,t;
    33     double v;
    34     while(~scanf("%d%d",&n,&m))
    35     {
    36         memset(mp,0,sizeof(mp));
    37         for(int i=1; i<=n; i++)
    38             for(int j=1; j<=n; j++)
    39                 dist[i][j]=INF;
    40         for(int i=0; i<m; i++)
    41         {
    42             scanf("%d %d %lf",&s,&t,&v);
    43             mp[s][t]=min(mp[s][t],v);
    44             dist[s][t]=min(dist[s][t],v);
    45         }
    46         //  printf("%lf
    ",dist[1][4]);
    47         if(floyd()<1)
    48             printf("YES
    ");
    49         else printf("NO
    ");
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    php exec() error…
    已达到计算机的连接数最大值,无法再同此远程计算机连接
    网站URL路径的中文问题[中文路径编码]【转】
    获取用户客户端的IP的方法
    flex如何处理java通过BlazeDS传递来的对象
    $_SERVER["所有这里的东西"]
    鼠标悬浮时显示对话框
    android设置 textview的背景
    在代码中设置字体颜色
    jdk 和sdk环境变量配置
  • 原文地址:https://www.cnblogs.com/52why/p/7460184.html
Copyright © 2011-2022 走看看