結果
問題 | No.2884 Pieces on Squares |
ユーザー |
|
提出日時 | 2024-09-08 14:44:01 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 993 bytes |
コンパイル時間 | 5,368 ms |
コンパイル使用メモリ | 313,532 KB |
実行使用メモリ | 199,708 KB |
最終ジャッジ日時 | 2024-09-08 14:44:12 |
合計ジャッジ時間 | 10,824 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 37 WA * 8 |
ソースコード
#include<bits/stdc++.h>using namespace std;#include<atcoder/all>using namespace atcoder;#define int long longint dp[5009][5009];signed main(){int h,w,n;cin>>h>>w>>n;dsu d(h+w);vector<int> h1(h+w,-1),w1(h+w,-1);for(int i=0;i<n;i++){int a,b;cin>>a>>b;a--;b--;d.merge(a,b+h);h1[d.leader(a)]=a;w1[d.leader(a)]=b;}vector<int> hs(h+w),ws(h+w);for(int i=0;i<h;i++){hs[d.leader(i)]++;}for(int i=0;i<w;i++){ws[d.leader(i+h)]++;}for(int i=0;i<=h;i++){for(int j=0;j<=w;j++)dp[i][j]=-1e18;}int cnt=0;for(int i=0;i<w;i++)if(d.size(i+h)==1)cnt++;for(int i=0;i<=cnt;i++){dp[0][i]=i*h;}// cout<<cnt<<endl;for(int i=0;i<h;i++){for(int j=0;j<=w;j++){dp[i+1][j]=max(dp[i+1][j],dp[i][j]);if(i==h1[d.leader(i)]){int li=d.leader(i);int z1=hs[li];int z2=ws[li];dp[i+1][j+z2]=max(dp[i+1][j+z2],dp[i][j]+z1*w+z2*h-2*z1*(j+z2));}}}int ans=0;for(int j=0;j<=w;j++)ans=max(ans,dp[h][j]);cout<<ans<<endl;}