[uva] 10099 - The Tourist Guide

10099 - The Tourist Guide

题目页:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1040

Mr.G.自己也算一个人……… 反映到代码里是127行

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

#include <iostream>

#include <stdlib.h>

#include <queue>

int number_ways;

int number_points;

struct

{

    bool used;

    int parent;

    int n;

    int list[101];

}buffer_map[110];

struct Ways

{

    int x, y;

} buffer_ways[110*110];

int buffer_values[101][101];

int start, end, number_customer;

// 降序排列

int compare_decrease(const void *a, const void *b)

{

    int bx = ((Ways*)b)->x;

    int by = ((Ways*)b)->y;

    int ax = ((Ways*)a)->x;

    int ay = ((Ways*)a)->y;

     return buffer_values[bx][by] - buffer_values[ax][ay];

}

void bfs()

{

    // 1. build tree

    // a. init G

    for (int i = 0; i < number_points; i++)

    {

        buffer_map[i].n = 0;

        buffer_map[i].used = false;

    }

    // b. add ways (double dirction)

    for (int i = 0; i < number_points - 1; i++)

    {

        int x = buffer_ways[i].x;

        int y = buffer_ways[i].y;

        buffer_map[x].list[buffer_map[x].n] = y;

        buffer_map[x].n++;

        y = buffer_ways[i].x;

        x = buffer_ways[i].y;

        buffer_map[x].list[buffer_map[x].n] = y;

        buffer_map[x].n++;

    }

    // search

    std::queue<int> q;

    q.push(start);

    while(!q.empty())

    {

        int u = q.front();

        q.pop();

        if (u == end)

            return;

        int length = buffer_map[u].n;

        for (int i = 0; i < length; i++)

        {

            int v = buffer_map[u].list[i];

            if (buffer_map[v].used == false)

            {

                buffer_map[v].parent = u;

                buffer_map[v].used = true;

                q.push(v);

            }

        }

    }

}

int main()

{

    int count = 1;

    scanf("%d%d", &number_points, &number_ways);

    while(number_points != 0 && number_ways != 0)

    {

        // 1. read ways

        for (int i = 0; i < number_ways; i++)

        {

            int x, y, values;

            scanf("%d%d%d", &x, &y, &values);

            buffer_ways[i].x = x;

            buffer_ways[i].y = y;

            buffer_values[x][y] = values;

            buffer_values[y][x] = values;

        }

        // 2. read start and target and customer

        scanf("%d%d%d", &start, &end, &number_customer);

        // 3. sort

        qsort(buffer_ways, number_ways, sizeof(Ways), compare_decrease);

        // 4. bfs

        bfs();

        // 5. find ways

        int v = end;

        int min_values = buffer_values[v][buffer_map[v].parent];

        while(v != start)

        {

            int next_values = buffer_values[v][buffer_map[v].parent];

            if (next_values < min_values)

                min_values = next_values;

            v = buffer_map[v].parent;

        }

        min_values--;

        int remainder = number_customer % min_values;

        printf("Scenario #%d\nMinimum Number of Trips = ", count);

        if (remainder)

            printf("%d\n", number_customer / min_values + 1);

        else

            printf("%d\n", number_customer / min_values);

        // read next data

        scanf("%d%d", &number_points, &number_ways);

        count++;

    }

    return 0;

}

时间: 2024-10-05 09:06:39

[uva] 10099 - The Tourist Guide的相关文章

uva 10099 The Tourist Guide nyoj 1019 亲戚来了【单个路线最大流【最短路算法】】

题目:uva 10099 The Tourist Guide nyoj 1019 亲戚来了 题意:给出一个无向图,每条路有一个容量.从 s 到 t 的一条最大的流量. 分析:这个题目可以用最短路的算法来做,最短路是求从 s 到 t 的最短路,这里是求从 s 到 t 的最小容量.最短路的三种算法都可以. nyoj的使我们比赛的题目,有坑,图有重边,要处理,还有s可能等于t. spfa代码: #include <cstdio> #include <iostream> #include

uva 10099 The Tourist Guide(单源最短路/spfa/dijkstra)

题目: 链接:点击打开链接 题意: 思路: 代码: #include <iostream> #include <cstring> #include <cstdio> using namespace std; int map[101][101]; void floyd(int n) { for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) map[i][j] = m

UVA 10099 The Tourist Guide【floyd】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1040 题意: n个点,m条路径,每条路径最多通过人数最多为value人,求把v个游客从a点运送到b点,需要几辆车,注意导游自己也算一个人. 思路:floyd找出两点间最大运送量,然后计算需要几躺即可 代码: #include <stdio.h> #include &

10099 The Tourist Guide

题意:给出n的城市m条通道,然后每条通道最大的承载人数给出来了,然后给出起点和终点以及要搭载的人数,问最少要走多少次才能把全部游客送到目的地 因为导游每次都要跟团,所以每条交通道路搭载的最大人数要减1= = 克鲁斯卡尔算法,就会排序的时候按照运输人数的从大到小排序,然后当起点和终点在一个联通分支时即可 #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> usi

UVA10099 - The Tourist Guide(floyd + 最小值的最大化)

UVA10099 - The Tourist Guide(floyd + 最小值的最大化) UVA10099 - The Tourist Guide 题目大意: 给一无向图,图上的点代表城市,边代表路,每条边上的权值代表的是这条路上的巴士的最大乘客数,作为导游,给定起点和终点,和负责的游客,问需要的最少的趟数可以将这个游客送到终点. 解题思路: 路径上最小值的最大化.减少趟数,那么就的要求这条路上的可负载乘客量尽量要大,注意每一趟导游都要跟上.floyd最短路过程中,记录下路径上的最大值. G[

UVa10099_The Tourist Guide(最短路/floyd)(小白书图论专题)

解题报告 题意: 有一个旅游团现在去出游玩,现在有n个城市,m条路.由于每一条路上面规定了最多能够通过的人数,现在想问这个旅游团人数已知的情况下最少需要运送几趟 思路: 求出发点到终点所有路当中最小值最大的那一条路. 求发可能有多种,最短路的松弛方式改掉是一种,最小生成树的解法也是一种(ps,prime和dijs就是这样子类似的) #include <iostream> #include <cstdio> #include <cstring> #include <

floyd类型题UVa-10099-The Tourist Guide +Frogger POJ - 2253

The Tourist Guide Mr. G. works as a tourist guide. His current assignment is to take some tourists from one city to another. Some two-way roads connect the cities. For each pair of neighboring cities there is a bus service that runs only between thos

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

UVA题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes