diff --git a/src/8/23/P7991.cpp b/src/8/23/P7991.cpp new file mode 100644 index 0000000..d51a642 --- /dev/null +++ b/src/8/23/P7991.cpp @@ -0,0 +1,104 @@ +#include +#include +#include +#include + +using namespace std; +using ll = long long; + +static const ll INF = (ll)4e18; + +int main(){ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + int T; + cin >> T; + while(T--){ + int N, M; + cin >> N >> M; + vector> adj(N+1); + for(int i = 0; i < M; i++){ + int u, v; + cin >> u >> v; + adj[u].push_back(v); + adj[v].push_back(u); + } + + vector vis1(N+1, 0), visN(N+1, 0); + queue q; + + vis1[1] = 1; + q.push(1); + while(!q.empty()){ + int u = q.front(); q.pop(); + for(int v: adj[u]){ + if(!vis1[v]){ + vis1[v] = 1; + q.push(v); + } + } + } + + visN[N] = 1; + q.push(N); + while(!q.empty()){ + int u = q.front(); q.pop(); + for(int v: adj[u]){ + if(!visN[v]){ + visN[v] = 1; + q.push(v); + } + } + } + + if(vis1[N]){ + cout << 0 << "\n"; + continue; + } + + vector S, Tset; + S.reserve(N); + Tset.reserve(N); + for(int i = 1; i <= N; i++){ + if(vis1[i]) S.push_back(i); + if(visN[i]) Tset.push_back(i); + } + sort(S.begin(), S.end()); + sort(Tset.begin(), Tset.end()); + + vector dist1(N+1, INF), distN(N+1, INF); + { + int j = 0; + for(int w = 1; w <= N; w++){ + while(j+1 < (int)S.size() && + llabs((ll)S[j+1] - w) <= llabs((ll)S[j] - w)) + { + j++; + } + ll d = ll(S[j] - w); + dist1[w] = d*d; + } + } + + { + int j = 0; + for(int w = 1; w <= N; w++){ + while(j+1 < (int)Tset.size() && + llabs((ll)Tset[j+1] - w) <= llabs((ll)Tset[j] - w)) + { + j++; + } + ll d = ll(Tset[j] - w); + distN[w] = d*d; + } + } + + ll ans = INF; + for(int w = 1; w <= N; w++){ + ans = min(ans, dist1[w] + distN[w]); + } + + cout << ans << "\n"; + } +} diff --git a/src/8/24/find-the-minimum-area-to-cover-all-ones-ii.cpp b/src/8/24/find-the-minimum-area-to-cover-all-ones-ii.cpp new file mode 100644 index 0000000..fd27d14 --- /dev/null +++ b/src/8/24/find-the-minimum-area-to-cover-all-ones-ii.cpp @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include +#include +using namespace std; + + +class Solution { +public: + static inline int getminarea(const vector>&v,int x1,int y1,int x2,int y2){ + bool all0=true; + int a1=x2,b1=y2,a2=x1,b2=y1; + for(int i=x1;i>& g) { + int ans=1145141; + //横三条 + for(int i=1;i