2767343 | 2008-03-02 15:15:48 | Accepted | 2546 | C++ | 00:00.45 | 4364K | C.D.=.= |
写了个最简单的单源路径算法。完全是O(V^2)。比起2281的最小堆+链表差了不止一个档次……
后续还有一个记忆化搜索的处理,当value[u]>value[v]的时候可以把u的路径可能数加到v上。Waterloo的那一次LC还比较简单,加上网站提供标程与数据,已经轻松Clear。
1
#include <cstdio>
2
#include <string>
3![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
4
#define MAXN 200000000
5![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
6
int N, M, value[1001], visited[1001], a[1001][1001], num[1001];
7![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
8
int init ();
9
void dijk ();
10
void dp ();
11
int func ( int );
12![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
13
int main ()
14![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
15
//freopen ( "in.txt", "r", stdin );
16
while ( init () )
17![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
18
dijk ();
19
dp ();
20
//print ();
21
}
22
return 0;
23
}
24![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
25
int init ()
26![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
27
memset ( a, 0, sizeof ( a ) );
28
scanf ( "%d", &N );
29
if ( !N )
30
return 0;
31
scanf ( "%d", &M );
32
int i, j, tx, ty, tw;
33
for ( i = 0, j = 0; i < M; i ++ )
34![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
35
scanf ( "%d %d %d", &tx, &ty, &tw );
36
a[tx][ty] = tw, a[ty][tx] = tw;
37
}
38
return 1;
39
}
40![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
41
void dijk ()
42![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
43
int i, j, u;
44
for ( i = 1; i <= N; i ++ )
45
value[i] = MAXN;
46
memset ( visited, 0, sizeof ( visited ) );
47
u = 2, value[u] = 0;
48
for ( i = 1; i < N; i ++ )
49![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
50
visited[u] = 1;
51
// update each point
52
for ( j = 1; j <= N; j ++ )
53![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
54
if ( !visited[j] && a[u][j] && a[u][j] + value[u] < value[j] )
55
value[j] = a[u][j] + value[u];
56
}
57
// find the min
58
int mn = MAXN;
59
for ( j = 1; j <= N; j ++ )
60![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
61
if ( !visited[j] && value[j] < mn )
62
mn = value[j], u = j;
63
}
64
if ( mn == MAXN )
65
break;
66
}
67
}
68![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
69
void dp ()
70![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
71
if ( value[1] == MAXN )
72![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
73
printf ( "0\n" );
74
return;
75
}
76
memset ( num, 0xff, sizeof ( num ) );
77
num[1] = 1;
78
printf ( "%d\n", func ( 2 ) );
79
}
80![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
81
int func ( int v )
82![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
83
if ( num[v] != -1 )
84
return num[v];
85
int u, sum = 0;
86
for ( u = 1; u <= N; u ++ )
87![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
88
if ( a[u][v] && value[u] > value[v] )
89
sum += func ( u );
90
}
91
return num[v] = sum;
92
}
93![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
2
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
3
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
4
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
5
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
6
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
7
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
8
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
9
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
10
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
11
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
12
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
13
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
14
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
15
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
16
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
17
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
18
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
19
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
20
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
21
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
22
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
23
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
24
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
25
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
26
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
27
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
28
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
29
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
30
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
31
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
32
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
33
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
34
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
35
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
36
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
37
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
39
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
40
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
41
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
42
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
43
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
44
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
45
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
46
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
47
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
48
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
49
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
50
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
51
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
52
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
53
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
54
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
55
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
56
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
57
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
58
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
59
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
60
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
61
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
62
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
63
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
64
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
65
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
66
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
67
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
68
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
69
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
70
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
71
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
72
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
73
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
74
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
75
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
76
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
77
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
78
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
79
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
80
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
81
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
82
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
83
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
84
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
85
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
86
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
87
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnitblog.com/Images/dot.gif)
88
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
89
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
90
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
91
![](http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif)
92
![](http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
93
![](http://www.cnitblog.com/Images/OutliningIndicators/None.gif)
评论