UVA 11082 Matrix Decompressing

#include<bits/stdc++.h>
using namespace std;
int r,c,a[30],b[30],pre[50],h[50][50];
bool vis[50];
int bfs(int s,int t){
	int i,p;
	memset(vis,0,sizeof(vis));
	queue<int>q;q.push(s);
	pre[s]=s;vis[s]=1;
	while(q.empty()==0){
		p=q.front();
		q.pop();
		for(i=1;i<=r+c+2;i++)
			if(h[p][i]>0&&vis[i]==0){
				pre[i]=p;
				vis[i]=1;
				if(i==t)return 1;
				q.push(i);
			}
	};
	return 0;
}
void EK(int s,int t){
	int i,d;
	while(bfs(s,t)){
		d=1e9;
		for(i=t;i!=s;i=pre[i])
			d=min(d,h[pre[i]][i]);
		for(i=t;i!=s;i=pre[i]){
			h[pre[i]][i]-=d;
			h[i][pre[i]]+=d;
		}
	}
}
int main(){
	int k,i,j,kase;
	scanf("%d",&kase);
	for(k=1;k<=kase;k++){
		memset(h,0,sizeof(h));
		scanf("%d%d",&r,&c);
		for(i=1;i<=r;i++)
			scanf("%d",&a[i]);
		for(i=1;i<=c;i++)
			scanf("%d",&b[i]);
		for(i=r;i>=1;i--)
			a[i]-=a[i-1];
		for(i=c;i>=1;i--)
			b[i]-=b[i-1];
		for(i=1;i<=r;i++)
			h[1][i+1]=a[i]-c;
		for(i=1;i<=c;i++)
			h[i+r+1][r+c+2]=b[i]-r;
		for(i=2;i<=r+1;i++)
			for(j=r+2;j<=r+c+1;j++)
				h[i][j]=19;
		EK(1,r+c+2);
		printf("Matrix %d\n",k);
		for(i=2;i<=r+1;i++){
			for(j=r+2;j<=r+c+1;j++)
				printf("%d ",20-h[i][j]);
			printf("\n");
		}
	}
	return 0;
}

發佈了158 篇原創文章 · 獲贊 0 · 訪問量 8442
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章