POJ 3436.ACM Computer Factory
来源:互联网 发布:mysql 查询会锁表吗 编辑:程序博客网 时间:2024/05/30 05:41
题目:http://poj.org/problem?id=3436
代码(C++,WA):
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
#include <string.h>
#include <bitset>
#define INF 0xfffffff
#define MAXN 2005
using namespace std;
int n,p;
int map[MAXN][MAXN];
int map1[MAXN][MAXN];
int edgenum[MAXN][MAXN];
bool vis[MAXN];
int pre[MAXN];
vector<int> starts;
int ans[MAXN][3];
int anscount;
bool getroute(int s, int e){
int len = pow(2.0,p);
int temp;
memset(vis,false,sizeof(vis));
for (int i = 0; i < len; i++)pre[i] = -1;
bool haveroute = false;
queue<int> que;
que.push(s);
vis[s] = true;
while (!haveroute && !que.empty()){
temp = que.front();
que.pop();
for (int i = 0; i < len; i++){
if (map[temp][i] && !vis[i]){
vis[i] = true;
pre[i] = temp;
if (i == e){
haveroute = true;
break;
}
que.push(i);
}
}
}
if (!haveroute)return false;
return true;
}
int getMaxflow(int s, int e){
int t;
int result = 0;
anscount = 0;
while (getroute(s, e)){
int minflow = INF;
t = e;
while (pre[t] != -1){
minflow = min(minflow, map[pre[t]][t]);
t = pre[t];
}
t = e;
while (pre[t] != -1){
map[pre[t]][t] -= minflow;
map[t][pre[t]] += minflow;
int a = edgenum[pre[t]][t];
//int b = map1[pre[t]][t];
t = pre[t];
if(edgenum[pre[t]][t]!=0){
ans[anscount][0]=edgenum[pre[t]][t];
ans[anscount][1]=a;
ans[anscount][2]=minflow;
anscount++;
}
}
result += minflow;
}
return result;
}
void dfs(int* pp, int i, int num){
if(i==p)starts.push_back(num);
else{
if(pp[i]==0)dfs(pp,i+1,num);
else if(pp[i]==1){
num+=pow(2.0,i);
dfs(pp,i+1,num);
}
else if(pp[i]==2){
dfs(pp,i+1,num);
num+=pow(2.0,i);
dfs(pp,i+1,num);
}
}
}
int main(){
cin>>p>>n;
memset(map,0,sizeof(map));
int end;
int value;
for(int i = 0; i < n; i++){
cin>>value;
int pp[15];
for(int j = 0; j < p; j++)cin>>pp[j];
starts.clear();
dfs(pp,0,0);
for(int j = 0; j < p; j++)cin>>pp[j];
end = 0;
for(int j = 0; j < p; j++)if(pp[j]==1)end+=pow(2.0,j);
for(vector<int>::iterator it = starts.begin(); it != starts.end(); it++){
if(value>map[*it][end]){
map[*it][end] = value;
map1[*it][end] = value;
edgenum[*it][end] = i+1;
}
}
}
cout<<getMaxflow(0,pow(2.0,p)-1)<<' ';
cout<<anscount<<endl;
for(int i = 0; i < anscount; i++){
cout<<ans[i][0]<<' '<<ans[i][1]<<' '<<ans[i][2]<<endl;
}
}
总结: 对最大流不是很了解, 不知道错在哪, 先开个坑. 有大神知道错在哪里有劳提醒.
- POJ 3436.ACM Computer Factory
- ACM Computer Factory POJ
- ACM Computer Factory POJ
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- poj 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- ACM Computer Factory(POJ--3436
- 【Poj 3436】 ACM Computer Factory
- POJ 3436 ACM Computer Factory
- 基于ARM Cortex-M0+内核的bootloader程序升级原理及代码解析
- N-Queens II--LeetCode
- Spring boot 使用logback AOP实现HTTP请求日志入MongoDB
- React-Native开发总结-react-navigation应用与实践
- jstl中<c:forEach>的用法
- POJ 3436.ACM Computer Factory
- 树莓派安装wordpress
- 大数据(二十三)Hive【Hive三种启动方式 、 HIVE Server2详解 、 jdbc链接HIVE】
- Android Studio中Git的使用说明书
- css position
- office 2013下载及激活
- Java学习之路:不走弯路,就是捷径
- 如何使用UCI数据集
- java多线程之-----对象及变量的并发访问1(synchronized同步方法)