powered by:ab_in 局外人
忘了有比賽了,賽後就先補三個題吧。
有三個做法,第一反應還是bfs
bfsbf
s,需要都跑一遍,所以就不用vis
visvi
s標記了。
#include
using
namespace std;
int x2[4]
=;int y2[4]
=;const
int inf=
0x3f3f3f3f
;struct sa
;queueq;
int a[
1010][
1010
],dis[
1010][
1010];
int n;
intbfs
(int x,
int y));
while
(!q.
empty()
));}
}}}return ans;
}int ans=inf;
intmain()
}if(!a[1]
[1]||
!a[n]
[n])
printf
("0");
else
else
}return0;
}
dfs
dfsdf
s
#include
using
namespace std;
int x2[4]
=;int y2[4]
=;const
int inf=
0x3f3f3f
;int a[
1010][
1010
],vis[
1010][
1010];
int n,ans=inf;
void
dfs(
int x,
int y,
int dis)
if(dis>=ans)
return
;for
(int i=
0;i<
4;i++)}
intmain()
}if(!a[1]
[1]||
!a[n]
[n])
printf
("0");
else
return0;
}
dij
kstr
adijkstra
dijkst
ra
#include
using
namespace std;
namespace io
inline
voidpc(
char c)
inline
intread()
template
<
class
i>
inline
void
write
(i x)
class
flusher_
}io_flusher;
}using
namespace io;
const
int maxn=
1e6+10;
const
int inf=
0x3f3f3f3f
;struct sa
;bool
operator
<
(const sa &a,
const sa &b)
priority_queueq;
struct edge
edge[maxn]
;int head[maxn]
;int cnt;
void
add_edge
(int u,
int v,
int w)
int dis[maxn]
;bool vis[maxn]
;int n,m,s,u,v,w;
void
dijkstra
(int s,
int v));
while
(!q.
empty()
));}
}}}int a[
110]
[110];
int x2[4]
=;int y2[4]
=;intmain()
}}}dijkstra
(n+1
,a[1][
1]);
if(dis[n*n+n]
==inf)
printf
("0");
else
printf
("%d"
,dis[n*n+n]);
return0;
}
簽到。
l=
set(
)cnt=
0for _ in
range
(int
(input()
)): s=
input()
if s not
in l:
cnt+=
1 l.add(s)
if s==
"younik"
:print
(cnt)
break
次短路!!!顧名思義就是第二短的路
邊可以重複走!
#include
using
namespace std;
namespace io
inline
voidpc(
char c)
inline
intread()
template
<
class
i>
inline
void
write
(i x)
class
flusher_
}io_flusher;
}using
namespace io;
const
int maxn=
1e6+10;
const
int inf=
0x3f3f3f3f
;struct sa
;bool
operator
<
(const sa &a,
const sa &b)
priority_queueq;
struct edge
edge[maxn<<2]
;int head[maxn]
;int cnt;
void
add_edge
(int u,
int v,
int w)
int dis1[maxn]
,dis2[maxn]
;bool vis[maxn]
;int n,m,s,u,v,w;
void
dij(
int s,
int v,
int d)
);while
(!q.
empty()
));}
}}}int
main()
dij(1,
0,dis1)
;//從1開始跑最短路
dij(n,
0,dis2)
;//從n開始跑最短路
int ans1=dis1[n]
,ans2=inf,min_d=inf;
for(
int i=
0;i) cout<<
min(ans2,ans1+min_d*2)
;//ans1裡已經有了一次min_d
return0;
}
完結。 《陝西師範大學第九屆ACM程式設計競賽》
a 其實並不是特別難的乙個題,想的太複雜了。首先,我們把關係看成能夠傳遞的,那麼我們並查集統計連通塊之後。可以發現,對於乙個連通塊,最優方案肯定只有1個人會沒朋友。因為一直把和當前刪的點有關係的人的人刪進去,最後肯定就能刪完全部點,並且保證只有第乙個進去的人沒朋友。因為要保證字典序最小,我們每次合併...
青島農業大學第九屆ACM程式設計競賽
題意 是否能夠把所有的書都放在兩個揹包裡。題解 貪心 c 版本一 author stzg language c include include include include include include include include include include include includ...
「浪潮杯」第九屆山東省ACM大學生程式設計競賽
aanagram 進入討論324 620 bbullet 進入討論56 213 二分 二分圖匹配 include include includeusing namespace std const int maxn 510 const int inf 0x3f3f3f3f int n,vis maxn...