| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
有人人告诉为什么我的代码tle吗? 找不出错误来!!!#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 51*51
#define INF 999999999
int map[51][MAX];
int lx[51], ly[MAX];
int match[51];
bool visx[51], visy[MAX];
int nN, nM;
void vInput()
{
int i, j, k, val;
cin >> nN >> nM;
for(i = 1; i <= nN; i++)
{
for(j = 1; j <= nM; j++)
{
cin >> val;
for(k = 1; k <= nN; k++)
map[i][(j-1)*nN + k] = -val * k;
}
}
}
bool dfs(int u)
{
int i;
visx[u] = true;
for(i = 1; i <= nN*nM; i++)
{
if(!visy[i] && (lx[u] + ly[i] == map[u][i]))
{
visy[i] = true;
if(match[i] == 0 || dfs(match[i]))
{
match[i] = u;
return true;
}
}
}
return false;
}
int km()
{
int i, j, k, d, nRet;
//初始化
for(i = 1; i <= nN; i++)
{
lx[i] = -INF;
for(j = 1; j <= nN*nM; j++)
if(map[i][j] > lx[i])
lx[i] = map[i][j];
}
memset(match, 0, sizeof(match));
memset(ly, 0, sizeof(ly));
for(i = 1; i <= nN; i++)
{
while(!dfs(i))
{
memset(visx, false, sizeof(visx));
memset(visy, false, sizeof(visy));
d = INF;
for(j = 1; j <= nN; j++)
{
if(visx[j])
{
for(k = 1; k <= nN*nM; k++)
if(!visy[k] && d > (lx[j] + ly[k] - map[j][k]))
d = lx[j] + ly[k] - map[j][k];
}
}
for(j = 1; j <= nN; j++)
if(visx[j])
lx[j] -= d;
for(k = 1; k <= nN*nM; k++)
if(visy[k])
ly[k] += d;
}
}
nRet = 0;
for(i = 1; i <= nN*nM; i++)
nRet += map[match[i]][i];
return -nRet;
}
void vOut(int out)
{
double dAns;
dAns = 1.0 * out / nN;
printf("%.6f\n", dAns);
}
int main()
{
int nTest;
int nTemp;
cin >> nTest;
while(nTest--)
{
vInput();
nTemp = km();
vOut(nTemp);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator