陝西師範大學第九屆ACM程式設計競賽水題

2021-10-09 06:00:55 字數 4129 閱讀 8055

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...