标签:mos 覆盖 ati inter UI placed 最小路径覆盖 -- 基站
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9844 | Accepted: 4868 |
Description
Input
Output
Sample Input
2 7 9 ooo**oooo **oo*ooo* o*oo**o** ooooooooo *******oo o*o*oo*oo *******oo 10 1 * * * o * * * * * *
Sample Output
17 5
Source
1 #include <cstring> 2 #include <cstdio> 3 4 using namespace std; 5 6 char s[440]; 7 int fx[4]={0,1,0,-1}; 8 int fy[4]={1,0,-1,0}; 9 bool vis[440],map[440][440]; 10 int cnt,match[440],if_[440][440]; 11 12 int find(int u) 13 { 14 for(int v=1;v<=cnt;v++) 15 if(map[u][v]&&!vis[v]) 16 { 17 vis[v]=1; 18 if(!match[v]||find(match[v])) 19 { 20 match[v]=u; 21 return true; 22 } 23 } 24 return false; 25 } 26 27 int main() 28 { 29 int t; scanf("%d",&t); 30 for(int n,m,ans=0;t--;cnt=ans=0) 31 { 32 scanf("%d%d",&n,&m); 33 for(int i=1;i<=n;i++) 34 { 35 scanf("%s",s+1); 36 for(int j=1;j<=m;j++) 37 if(s[j]==‘*‘) if_[i][j]=++cnt; 38 } 39 for(int i=1;i<=n;i++) 40 for(int j=1;j<=m;j++) 41 if(if_[i][j]) 42 for(int k=0;k<4;k++) 43 { 44 int x=i+fx[k],y=j+fy[k]; 45 if(if_[x][y]) 46 map[if_[i][j]][if_[x][y]]=1; 47 } 48 for(int i=1;i<=cnt;i++) 49 { 50 if(find(i)) ans++; 51 memset(vis,0,sizeof(vis)); 52 } 53 printf("%d\n",cnt-ans/2); 54 memset(map,0,sizeof(map)); 55 memset(if_,0,sizeof(if_)); 56 memset(match,0,sizeof(match)); 57 } 58 return 0; 59 }
标签:mos 覆盖 ati inter UI placed 最小路径覆盖 -- 基站
原文地址:http://www.cnblogs.com/Shy-key/p/7424926.html