锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include聽
<
stdlib.h
>
#include聽
<
string
.h
>
#define
聽N聽1005
#define
聽inf聽1<<29
struct
聽Edge{
聽聽聽聽
int
聽u,聽v,聽d;
聽聽聽聽Edge(聽
int
聽a
=
聽
0
,聽
int
聽b
=
聽
0
,聽
int
聽c
=
聽
0
聽):
聽聽聽聽聽聽聽聽u(a),聽v(b),聽d(c)聽{}
};
int
聽n,聽ml,聽md,聽s
=
聽
0
;
Edge聽聽ege[
20010
];
int
聽dist[N];
int
聽bell_man(){
聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)聽dist[i]
=
聽inf;
聽聽聽聽dist[
1
]
=
聽
0
;
聽聽聽聽
聽聽聽聽
int
聽flag
=
聽
0
;
聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽){
聽聽聽聽聽聽聽聽flag
=
聽
0
;
聽聽聽聽聽聽聽聽
for
(聽
int
聽j
=
聽
0
;聽j
<
聽s;聽
++
j聽){
聽聽聽聽聽聽聽聽聽聽聽聽
int
聽u
=
聽ege[j].u,聽v
=
聽ege[j].v,聽w
=
聽ege[j].d;
聽聽聽聽聽聽聽聽聽聽聽聽
if
(聽dist[u]
+
聽w
<
聽dist[v]聽)聽dist[v]
=
聽dist[u]
+
聽w,聽flag
=
聽
1
;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
if
(聽
!
flag聽)聽
break
;
聽聽聽聽}
聽聽聽聽
if
(聽flag聽)聽
return
聽
-
1
;
聽聽聽聽
else
聽
if
(聽dist[n]
==
聽inf聽)聽
return
聽
-
2
;
聽聽聽聽
else
聽
return
聽dist[n];
}
int
聽main(){
聽聽聽聽scanf(
"
%d%d%d
"
,
&
n,
&
ml,
&
md聽);
聽聽聽聽
int
聽u,聽v,聽d;
聽聽聽聽
while
(聽ml
--
聽){
聽聽聽聽聽聽聽聽scanf(
"
%d%d%d
"
,
&
u,
&
v,
&
d聽);
聽聽聽聽聽聽聽聽ege[s
++
]
=
聽Edge(聽u,聽v,聽d聽);
聽聽聽聽}
聽聽聽聽
while
(聽md
--
聽){
聽聽聽聽聽聽聽聽scanf(
"
%d%d%d
"
,
&
u,
&
v,
&
d聽);
聽聽聽聽聽聽聽聽ege[s
++
]
=
聽Edge(聽v,聽u,聽
-
d聽);
聽聽聽聽}
聽聽聽聽printf(
"
%d\n
"
,聽bell_man()聽);
聽聽聽聽
return
聽
0
;
}
]]>
#include聽
<
vector
>
using
聽
namespace
聽std;
#define
聽N聽40010
typedef聽pair
<
int
,
int
>
聽PAIR;
int
聽m,聽n;
vector
<
PAIR
>
聽query[N],聽map[N];
int
聽uset[N]
=
聽{
0
},聽acs[N],聽flag[N]
=
聽{
0
},聽dis[N]
=
聽{
0
},聽ans[N],聽visite[N]
=
{
0
};
int
聽find(聽
int
聽x聽){
聽聽聽聽
while
(聽x
!=
聽uset[x]聽)聽x
=
聽uset[x];
聽聽聽聽
return
聽x;聽}
void
聽join(聽
int
聽x,聽
int
聽y聽){聽聽uset[聽find(x)聽]
=
聽uset[聽find(y)聽];聽}
void
聽dfs(聽
int
聽u,聽
int
聽d聽){
聽聽聽聽uset[u]
=
聽u;聽acs[u]
=
聽u;聽dis[u]
=
聽d;聽visite[u]
=
聽
1
;
聽聽聽聽
for
(聽size_t聽i
=
聽
0
;聽i
<
聽map[u].size();聽
++
i聽){
聽聽聽聽聽聽聽聽
int
聽v
=
聽map[u][i].first,聽w
=
聽map[u][i].second;
聽聽聽聽聽聽聽聽
if
(聽
!
visite[v]聽){
聽聽聽聽聽聽聽聽聽聽聽聽dfs(聽v,聽d
+
聽w聽);
聽聽聽聽聽聽聽聽聽聽聽聽join(聽u,聽v聽);聽acs[聽find(u)聽]
=
聽u;聽聽}
聽聽聽聽}
聽聽聽聽
聽聽聽聽flag[u]
=
聽
1
;
聽聽聽聽
for
(聽size_t聽i
=
聽
0
;聽i
<
聽query[u].size();聽
++
i聽){
聽聽聽聽聽聽聽聽
int
聽v
=
聽query[u][i].first,聽w
=
聽query[u][i].second;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
if
(聽flag[v]聽)聽ans[w]
=
聽dis[u]
+
聽dis[v]
-
聽
2
*
聽dis[聽acs[聽find(v)聽]聽];
聽聽聽聽}聽聽聽聽
}
int
聽main(){
聽聽聽聽
int
聽u,聽v,聽d;
聽聽聽聽
char
聽s[
10
];
聽聽聽聽
聽聽聽聽scanf(
"
%d%d
"
,
&
n,
&
m);
聽聽聽聽
while
(聽m
--
聽){
聽聽聽聽聽聽聽聽scanf(
"
%d%d%d%s
"
,
&
u,
&
v,
&
d,s聽);
聽聽聽聽聽聽聽聽map[u].push_back(聽PAIR(v,d)聽);
聽聽聽聽聽聽聽聽map[v].push_back(聽PAIR(u,d)聽);
聽聽聽聽}
聽聽聽聽
聽聽聽聽scanf(
"
%d
"
,
&
m聽);
聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<=
聽m;聽
++
i聽){
聽聽聽聽聽聽聽聽scanf(
"
%d%d
"
,
&
u,
&
v聽);
聽聽聽聽聽聽聽聽query[u].push_back(聽PAIR(v,i)聽);
聽聽聽聽聽聽聽聽query[v].push_back(聽PAIR(u,i)聽);
聽聽聽聽}
聽聽聽聽memset(聽flag,聽
0
,聽
sizeof
(flag)聽);
聽聽聽聽memset(聽visite,聽
0
,聽
sizeof
(visite)聽);
聽聽聽聽
聽聽聽聽dfs(聽
1
,聽
0
聽);聽
聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<=
聽m;聽
++
i聽)聽printf(
"
%d\n
"
,聽ans[i]聽);
聽聽聽聽
聽聽聽聽
return
聽
0
;
}
]]>
#include聽
<
stdio.h
>
#include聽
<
string
.h
>
#include聽
<
limits.h
>
#define
聽聽N聽聽110
int
聽聽n,result;
int
聽聽map[N][N];
bool
聽visite[N];
int
聽聽dis[N];
void
聽聽Prim()
{
聽聽聽聽memset(聽visite,聽
false
,聽
sizeof
(visite)聽);
聽聽聽聽visite[
0
]
=
聽
true
;聽聽result
=
聽
0
;
聽聽聽聽
聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽n;聽
++
i聽)聽聽dis[i]
=
聽map[
0
][i];
聽聽聽聽
聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<
聽n;聽
++
i聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
int
聽min
=
聽INT_MAX,聽k;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
for
(聽
int
聽j
=
聽
0
;聽j
<
聽n;聽
++
j聽)
聽聽聽聽聽聽聽聽
if
(聽
!
visite[j]聽
&&
聽dis[j]
<
聽min聽)聽min
=
聽dis[j],聽k
=
聽j;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽visite[k]
=
聽
true
;聽聽result
+=
聽dis[k];
聽聽聽聽聽聽聽聽
for
(聽
int
聽j
=
聽
0
;聽j
<
聽n;聽
++
j聽)
聽聽聽聽聽聽聽聽
if
(聽
!
visite[j]聽
&&
聽map[k][j]
>
聽
0
聽
&&
聽map[k][j]
<
聽dis[j]聽)聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽dis[j]
=
聽map[k][j];
聽聽聽聽}
}
int
聽main()
{
聽聽聽聽
while
(聽scanf(
"
%d
"
,
&
n)
!=
聽EOF聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽聽聽聽
for
(聽
int
聽j
=
聽
0
;聽j
<
聽n;聽
++
j聽)
聽聽聽聽聽聽聽聽聽聽聽scanf(
"
%d
"
,聽
&
map[i][j]聽);
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽Prim();
聽聽聽聽聽聽聽聽printf(
"
%d\n
"
,聽result聽);
聽聽聽聽}
聽聽聽聽
聽聽聽聽
return
聽
0
;
}
聽聽聽聽
]]>
#include聽
<
stdlib.h
>
#include聽
<
string
.h
>
int
聽聽聽visite[
15
];
char
聽聽str[
100
];
int
聽聽聽d[
100
];
int
聽聽聽len;
bool
聽multi(聽
int
聽n聽)
{
聽聽聽聽
int
聽t[
100
];
聽聽聽聽
int
聽v[
15
];
聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽len;聽
++
i聽)聽t[i]
=
聽d[i];聽聽
聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽
15
;聽
++
i聽聽)聽v[i]
=
聽visite[i];
聽聽聽聽
聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽len;聽
++
i聽)
聽聽聽聽t[i]
*=
聽n;
聽聽聽聽
聽聽聽聽
for
(聽
int
聽i
=
聽len
-
聽
1
;聽i
>
聽
0
;聽i
--
聽)
聽聽聽聽{
聽聽聽聽聽聽聽聽t[i
-
1
]
+=
聽t[i]
/
聽
10
;
聽聽聽聽聽聽聽聽t[i]
%=
聽
10
;
聽聽聽聽}
聽聽聽聽
聽聽聽聽
if
(聽t[
0
]
>=
聽
10
聽)聽
return
聽
false
;
聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽len;聽
++
i聽)聽聽
if
(聽
--
v[聽t[i]聽]
<
聽
0
聽)聽
return
聽
false
;
聽聽聽聽
聽聽聽聽
return
聽
true
;
}
bool
聽isok()
{
聽聽聽聽
for
(聽
int
聽i
=
聽
2
;聽i
<=
聽len;聽
++
i聽)
聽聽聽聽
if
(聽
!
multi(聽i聽)聽)聽
return
聽
false
;
聽聽聽聽
聽聽聽聽
return
聽
true
;
}
int
聽main()
{
聽聽聽聽
while
(聽scanf(
"
%s
"
,str)
!=
聽EOF聽)
聽聽聽聽{
聽聽聽聽聽聽聽聽len
=
聽strlen(聽str聽);聽聽
聽聽聽聽聽聽聽聽memset(聽visite,聽
0
,聽
sizeof
(visite)聽);
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽len;聽
++
i聽)聽{聽d[i]
=
聽str[i]
-
聽
'
0
'
;聽visite[聽d[i]聽]
++
;聽}
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
if
(聽isok()聽)聽printf(
"
%s聽is聽cyclic\n
"
,聽str聽);
聽聽聽聽聽聽聽聽
else
聽聽聽聽聽聽聽聽聽printf(
"
%s聽is聽not聽cyclic\n
"
,聽str聽);
聽聽聽聽}
聽聽聽聽
聽聽聽聽
return
聽
0
;
}
]]>
#include聽
<
stdio.h
>
#include聽
<
stdlib.h
>
#define
聽N聽50001
struct
聽Node
{
聽聽聽聽
int
聽a,聽b;
}
;
Node聽d[N];
int
聽聽n;
int
聽cmp(聽
const
聽
void
*
聽a,聽
const
聽
void
*
聽b聽)
{
聽聽聽聽Node
*
聽ta
=
聽(Node
*
)a;
聽聽聽聽Node
*
聽tb
=
聽(Node
*
)b;
聽聽聽聽
聽聽聽聽
if
(聽ta
->
a
==
聽tb
->
a聽)聽
return
聽ta
->
b
-
聽tb
->
b;
聽聽聽聽
聽聽聽聽
return
聽ta
->
a
-
聽tb
->
a;
}
int
聽main()
{
聽聽聽聽scanf(
"
%d
"
,聽
&
n);
聽聽聽聽
聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽n;聽
++
i聽)聽聽scanf(
"
%d%d
"
,聽
&
d[i].a,聽
&
d[i].b聽);
聽聽聽聽qsort(聽d,聽n,聽
sizeof
(聽d[
0
]聽),聽cmp聽);
聽聽聽聽
聽聽聽聽
int
聽min
=
聽d[
0
].a,聽max
=
聽d[
0
].b;
聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<
聽n;聽
++
i聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
if
(聽d[i].a
>
聽max聽)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽printf(
"
%d聽%d\n
"
,聽min,聽max聽);
聽聽聽聽聽聽聽聽聽聽聽聽min
=
聽d[i].a,聽max
=
聽d[i].b;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
else
聽
if
(聽d[i].b
>
聽max聽)聽max
=
聽d[i].b;
聽聽聽聽}
聽聽聽聽printf(
"
%d聽%d\n
"
,聽min,聽max聽);
聽聽聽聽
聽聽聽聽
return
聽
0
;
}
]]>
#include聽
<
stdio.h
>
#include聽
<
limits.h
>
#include聽
<
stdlib.h
>
#include聽
<
math.h
>
#include聽
<
string
.h
>
#define
聽N聽110
int
聽graph[N][N];
int
聽rank[N];
int
聽value[N];
int
聽m,聽n,聽len;
bool
聽聽findrank(聽
int
聽t聽)
{
聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽t;聽
++
i聽)
聽聽聽聽
if
(聽value[i]
==
聽t聽)聽
return
聽
true
;
聽聽聽聽
聽聽聽聽
return
聽
false
;
}
int
聽dis(聽
int
聽Rank聽)
{
聽聽聽聽
bool
聽visite[N];
聽聽聽聽
int
聽聽result[N];
聽聽聽聽rank[
0
]
=
聽Rank;
聽聽聽聽
聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)聽
聽聽聽聽
{
聽聽聽聽聽聽聽聽
int
聽t
=
聽Rank
-
聽rank[i];
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
if
(聽t
<=
聽m聽
&&
聽t
>=
聽
0
聽)聽
{聽visite[i]
=
聽
false
;聽聽result[i]
=
聽graph[
0
][i];聽}
聽聽聽聽聽聽聽聽
else
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
{聽visite[i]
=
聽
true
;聽聽聽result[i]
=
聽
-
1
;聽}
聽聽聽聽}
聽聽聽聽
聽聽聽聽visite[
0
]
=
聽
true
;
聽聽聽聽
for
(聽
int
聽t
=
聽
1
;聽t
<=
聽n;聽
++
t聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
int
聽聽min
=
聽INT_MAX;
聽聽聽聽聽聽聽聽
int
聽聽k
=
聽
-
1
;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<=
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽
if
(聽
!
visite[i]聽
&&
聽result[i]
>=
聽
0
聽
&&
聽result[i]
<
聽min聽聽)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽min
=
聽result[i];
聽聽聽聽聽聽聽聽聽聽聽聽k
=
聽i;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
if
(聽k
==
聽
-
1
聽)聽
break
;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽visite[k]
=
聽
true
;
聽聽聽聽聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽
if
(聽
!
visite[i]聽
&&
聽聽graph[k][i]
>=
聽
0
聽
&&
聽result[k]
>=
聽
0
聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
&&
聽(聽result[k]
+
聽graph[k][i]
<
聽result[i]聽
||
聽result[i]
==
聽
-
1
聽)聽)
聽聽聽聽聽聽聽聽聽聽聽聽result[i]
=
聽result[k]
+
聽graph[k][i];
聽聽聽聽聽聽聽聽}
聽
聽聽聽聽}
聽
聽聽聽聽
return
聽result[
1
];
}
int
聽main()
{
聽聽聽聽scanf(
"
%d%d
"
,聽
&
m,聽
&
n);
聽聽聽聽len
=
聽
0
;
聽聽聽聽
聽聽聽聽memset(聽graph,聽
-
1
,聽
sizeof
(
int
)
*
N
*
N聽);
聽聽聽聽
聽聽聽聽
for
(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
int
聽va,聽ra,聽nn;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽scanf(
"
%d%d%d
"
,聽
&
va,聽
&
ra,聽
&
nn聽);
聽聽聽聽聽聽聽聽graph[
0
][i]
=
聽va;
聽聽聽聽聽聽聽聽rank[i]
=
聽ra;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
if
(聽
!
findrank(聽ra聽)聽)聽value[len
++
]
=
聽ra;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
for
(聽
int
聽j
=
聽
0
;聽j
<
聽nn;聽
++
j聽)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽
int
聽a,聽b;
聽聽聽聽聽聽聽聽聽聽聽聽scanf(
"
%d%d
"
,聽
&
a,聽
&
b);
聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽graph[a][i]
=
聽b;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽
聽聽聽聽
聽聽聽聽
int
聽min
=
聽INT_MAX;
聽聽聽聽
for
(聽
int
聽i
=
聽
0
;聽i
<
聽len;聽
++
i聽)
聽聽聽聽聽聽聽聽
{聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽
int
聽t
=
聽dis(聽value[i]聽);
聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽
if
(聽t
<
聽min聽
&&
聽t
!=
聽
-
1
聽)聽min
=
聽t;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
聽聽聽聽printf(
"
%d\n
"
,聽min聽);
聽聽聽聽
聽聽聽聽
return
聽
0
;
}
]]>
#include聽
<
iostream
>
#include聽
<
stack
>
#include聽
<
vector
>
int
聽聽聽n,聽m;
int
聽聽聽degree[
26
];
int
聽聽聽data[
26
][
26
];
bool
聽聽exist[
26
];
std::vector
<
char
>
聽re;
int
聽length()
{
聽聽聽聽
int
聽num
=
聽
0
;
聽聽聽聽
for
聽(聽
int
聽i
=
聽
0
;聽i
<
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽
if
聽(聽exist[i]聽)
聽聽聽聽聽聽聽聽聽聽聽聽num
++
;
聽聽聽聽
return
聽num;
}
int
聽toplogicalsort()
{
聽聽聽聽std::stack
<
char
>
聽st;
聽聽聽聽
int
*
聽d
=
聽
new
聽
int
[n];
聽聽聽聽re.clear聽();
聽聽聽聽
for
聽(聽
int
聽i
=
聽
0
;聽i
<
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽d[i]
=
聽degree[i];
聽聽聽聽
for
聽(聽
int
聽i
=
聽
0
;聽i
<
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽
if
聽(聽d[i]
==
聽
0
聽
&&
聽exist[i]聽)st.push(i);
聽聽聽聽
bool
聽ok
=
聽
true
;
聽聽聽聽
while
(聽
!
st.empty()聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
if
聽(聽(
int
)st.size聽()
>
聽
1
聽)聽聽ok
=
聽
false
;
聽聽聽聽聽聽聽聽
int
聽t
=
聽st.top聽();
聽聽聽聽聽聽聽聽st.pop();
聽聽聽聽聽聽聽聽re.push_back聽(聽t
+
聽
'
A
'
聽);
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽i
=
聽
0
;聽i
<
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽data[i][t]
==
聽
1
聽
&&
聽exist[i]聽)
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽d[i]
--
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽d[i]
==
聽
0
聽)聽聽聽st.push聽(i);
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽
int
聽len
=
聽length();
聽聽聽聽
if
聽(聽(
int
)re.size聽()
<
聽len聽)聽
return
聽
2
;聽聽聽
//
聽exit聽circle
聽聽聽聽
if
聽(聽
!
ok聽)聽
return
聽
0
;
聽聽聽聽
if
聽(聽(
int
)re.size聽()
==
聽n聽)聽聽
return
聽
1
;
聽聽聽聽
return
聽
0
;
}
int
聽main()
{
聽聽聽聽
while
(聽scanf(
"
%d%d
"
,
&
n,
&
m),聽m
+
聽n
!=
聽
0
聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽memset(聽degree,聽
0
,聽
sizeof
(degree)聽);
聽聽聽聽聽聽聽聽memset(聽data,聽聽聽
0
,聽
sizeof
(data聽聽)聽);
聽聽聽聽聽聽聽聽memset(聽exist,聽聽
false
,聽
sizeof
(exist)聽);
聽聽聽聽聽聽聽聽
bool
聽isok
=
聽
true
;
聽聽聽聽聽聽聽聽
bool
聽determin
=
聽
false
;
聽聽聽聽聽聽聽聽getchar();
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽i
=
聽
1
;聽i
<=
聽m;聽
++
聽i聽)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽
char
聽a,聽b;
聽聽聽聽聽聽聽聽聽聽聽聽a
=
聽getchar();
聽聽聽聽聽聽聽聽聽聽聽聽getchar();
聽聽聽聽聽聽聽聽聽聽聽聽b
=
聽getchar();
聽聽聽聽聽聽聽聽聽聽聽聽getchar();
聽聽聽聽聽聽聽聽聽聽聽聽exist[a
-
'
A
'
]
=
聽
true
;
聽聽聽聽聽聽聽聽聽聽聽聽exist[b
-
'
A
'
]
=
聽
true
;
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽聽
!
determin聽
&&
聽isok聽
&&
聽(data[a
-
聽
'
A
'
][b
-
聽
'
A
'
]
==
聽
1
聽
||
聽a
==
聽b)聽聽)
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽isok
=
聽
false
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf(
"
Inconsistency聽found聽after聽%d聽relations.\n
"
,聽i);
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽data[b
-
聽
'
A
'
][a
-
聽
'
A
'
]
==
聽
0
聽)聽degree[b
-
聽
'
A
'
]
++
;
聽聽聽聽聽聽聽聽聽聽聽聽data[b
-
聽
'
A
'
][a
-
聽
'
A
'
]
=
聽
1
;
聽聽聽聽聽聽聽聽聽聽聽聽
int
聽type;
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽
!
determin聽
&&
聽isok聽
&&
聽(type
=
聽toplogicalsort())聽聽)
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽type
==
聽
1
聽)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽determin
=
聽
true
;聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf(
"
Sorted聽sequence聽determined聽after聽%d聽relations:聽
"
,聽i聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
for
聽(聽size_t聽x
=
聽
0
;聽x
<
聽re.size聽();聽
++
x聽)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf(
"
%c
"
,聽re[x]聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf(
"
.\n
"
);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
else
聽
if
聽(聽type
==
聽
2
聽)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽isok
=
聽
false
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽printf(
"
Inconsistency聽found聽after聽%d聽relations.\n
"
,聽i);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
if
聽(聽
!
determin聽
&&
聽isok聽)聽printf(
"
Sorted聽sequence聽cannot聽be聽determined.\n
"
);
聽聽聽聽}
聽聽聽聽
return
聽
0
;
}
]]>
#include聽
<
iostream
>
#include聽
<
algorithm
>
#include聽
<
limits
>
int
聽聽n,m;
int
聽聽graph[
1001
][
1001
];
bool
聽visite[
1001
];
int
聽聽result[
1001
];
void
聽shortpath()
{
聽聽聽聽memset(聽visite,聽
false
,聽
sizeof
(visite)聽);
聽聽聽聽memset(聽result,聽
0
,聽
sizeof
(result)聽);
聽聽聽聽visite[
1
]
=
聽
true
;
聽聽聽聽
for
聽(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽聽聽聽聽result[i]
=
聽graph[
1
][i];
聽聽聽聽
for
聽(聽
int
聽i
=
聽
1
;聽i
<
聽n;聽
++
i聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
int
聽max
=
聽
0
;
聽聽聽聽聽聽聽聽
int
聽k
=
聽
-
1
;
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽j
=
聽
1
;聽j
<=
聽n;聽
++
j聽)
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽
!
visite[j]聽
&&
聽result[j]
>
聽max聽)
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽max
=
聽result[j];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽k
=
聽j;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽visite[k]
=
聽
true
;
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽j
=
聽
1
;聽j
<=
聽n;聽
++
j聽)
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽
!
visite[j]聽
&&
聽graph[k][j]
>
聽
0
聽聽
&&
聽result[j]
<
聽std::min(聽result[k],聽graph[k][j]聽)聽)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽result[j]
=
聽std::min聽(聽result[k],聽graph[k][j]);
聽聽聽聽}
}
int
聽main()
{
聽聽聽聽
int
聽test;
聽聽聽聽scanf(
"
%d
"
,
&
test);
聽聽聽聽
for
聽(聽
int
聽t
=
聽
1
;聽t
<=
聽test;聽
++
t聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽scanf(
"
%d%d
"
,
&
n,
&
m);
聽聽聽聽聽聽聽聽memset(聽graph,聽
0
,聽
sizeof
(graph)聽);
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽i
=
聽
0
;聽i
<
聽m;聽
++
i聽)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽
int
聽x,聽y,d;
聽聽聽聽聽聽聽聽聽聽聽聽scanf(
"
%d%d%d
"
,
&
x,
&
y,
&
d);
聽聽聽聽聽聽聽聽聽聽聽聽graph[x][y]
=
聽d;
聽聽聽聽聽聽聽聽聽聽聽聽graph[y][x]
=
聽d;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽shortpath();
聽聽聽聽聽聽聽聽printf(
"
Scenario聽#%d:\n
"
,聽t聽);
聽聽聽聽聽聽聽聽printf(
"
%d\n
"
,聽result[n]聽);
聽聽聽聽聽聽聽聽printf(
"
\n
"
);
聽聽聽聽}
聽聽聽聽
return
聽
0
;
}
]]>
#include聽
<
iostream
>
#include聽
<
cmath
>
#include聽
<
limits
>
struct
聽Point
{
聽聽聽聽
int
聽x,y;
}
;
double
聽graph[
201
][
201
];
Point聽聽聽data[
201
];
int
聽聽聽聽聽n;
bool
聽聽聽聽visite[
201
];
double
聽聽result[
201
];
double
聽Distance(聽Point
&
聽a,聽Point
&
聽b聽)
{
聽聽聽聽
return
聽sqrt(聽(
double
)(聽(a.x
-
聽b.x)
*
聽(a.x
-
聽b.x聽)
+
聽(a.y
-
聽b.y聽)
*
聽(a.y
-
聽b.y聽)聽)聽);
}
void
聽shortpath(聽
int
聽t聽)
{
聽聽聽聽
for
聽(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽visite[i]
=
聽
false
;
聽聽聽聽聽聽聽聽result[i]
=
聽
0.0
;
聽聽聽聽}
聽聽聽聽
for
聽(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽result[i]
=
聽graph[t][i];
聽聽聽聽visite[t]
=
聽
true
;
聽聽聽聽
for
聽(聽
int
聽i
=
聽
1
;聽i
<=
聽n
-
聽
1
;聽
++
i聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
double
聽min
=
聽std::numeric_limits
<
double
>
::max();
聽聽聽聽聽聽聽聽
int
聽k
=
聽
-
1
;
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽j
=
聽
1
;聽j
<=
聽n;聽
++
j聽)
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽
!
visite[j]聽
&&
聽result[j]
<
聽min聽)
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽min
=
聽result[j];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽k
=
聽j;
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽visite[k]
=
聽
true
;
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽j
=
聽
1
;聽j
<=
聽n;聽
++
j聽)
聽聽聽聽聽聽聽聽聽聽聽聽
if
聽(聽
!
visite[j]聽
&&
聽std::max(聽graph[k][j],聽result[k]聽)
<
聽result[j]聽)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽result[j]
=
聽std::max(聽graph[k][j],聽result[k]聽);
聽聽聽聽}
}
int
聽main()
{
聽聽聽聽
int
聽num
=
聽
1
;
聽聽聽聽
while
(聽scanf(
"
%d
"
,
&
n),聽n
!=
聽
0
聽)
聽聽聽聽
{
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽聽聽聽聽scanf(
"
%d%d
"
,聽
&
data[i].x,聽
&
data[i].y聽);
聽聽聽聽聽聽聽聽
for
聽(聽
int
聽i
=
聽
1
;聽i
<=
聽n;聽
++
i聽)
聽聽聽聽聽聽聽聽聽聽聽聽
for
聽(聽
int
聽j
=
聽
1
;聽j
<=
聽n;聽
++
j聽)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽graph[i][j]
=
聽Distance(聽data[i],聽data[j]聽);
聽聽聽聽聽聽聽聽shortpath(
1
);
聽聽聽聽聽聽聽聽printf(
"
Scenario聽#%d\n
"
,聽num
++
聽);
聽聽聽聽聽聽聽聽printf(
"
Frog聽Distance聽=聽%.3lf\n
"
,聽result[
2
]聽);
聽聽聽聽聽聽聽聽printf(
"
\n
"
);
聽聽聽聽}
聽聽聽聽
return
聽
0
;
}
]]>