Submission #136336

#TimeUsernameProblemLanguageResultExecution timeMemory
136336KLPPDango Maker (JOI18_dango_maker)C++14
13 / 100
28 ms23956 KiB
#include<bits/stdc++.h> using namespace std; typedef long long int lld; typedef pair<lld,lld> pii; #define rep(i,a,b) for(int i=a;i<b;i++) #define trav(a,v) for(auto a:v) int has[3000][3000][2]; int n,m; bool valid(int x, int y){ if(x>=0 && x<n && y>=0 && y<m)return true; return false; } bool visited[10000000]; int size; int independent; vector<int> graph[1000000]; void DFS(int node, int parity){ independent+=parity; visited[node]=true; size++; trav(v,graph[node]){ if(!visited[v])DFS(v,(parity+1)%2); } } int main(){ cin>>n>>m; string table[n]; rep(i,0,n){ cin>>table[i]; } int V=0; int H=0; vector<pii> v; vector<pii> h; rep(i,0,n){ rep(j,0,m){ has[i][j][0]=-1; has[i][j][1]=-1; if(table[i][j]=='R'){ if(i+2<n && table[i+1][j]=='G' && table[i+2][j]=='W'){ has[i][j][0]=V; V++; v.push_back(pii(i,j)); } if(j+2<m && table[i][j+1]=='G' && table[i][j+2]=='W'){ has[i][j][1]=H; H++; h.push_back(pii(i,j)); } } } } rep(i,0,n){ rep(j,0,m){ if(has[i][j][0]!=-1){ if(has[i][j][1]!=-1){ graph[has[i][j][0]].push_back(has[i][j][1]+V); graph[has[i][j][1]+V].push_back(has[i][j][0]); } if(valid(i+1,j-1) && has[i+1][j-1][1]!=-1){ graph[has[i][j][0]].push_back(has[i+1][j-1][1]+V); graph[has[i+1][j-1][1]+V].push_back(has[i][j][0]); } if(valid(i+2,j-2) && has[i+2][j-2][1]!=-1){ graph[has[i][j][0]].push_back(has[i+2][j-2][1]+V); graph[has[i+2][j-2][1]+V].push_back(has[i][j][0]); } } } } /*cout<<V+H<<endl; rep(i,0,V+H){ trav(v,graph[i]){ cout<<v<<" "; } cout<<endl; }*/ rep(i,0,V+H){ visited[i]=false; } int ans=0; rep(i,0,V+H){ if(!visited[i]){ size=0; independent=0; DFS(i,0); ans+=max(independent,size-independent); } } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...