| ||||||||||
| 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 | |||||||||
为什么会超时呀????#include<stdio.h>
#include<string.h>
#include<limits.h>
#define MAX 201
int f[21][21];
bool dis[201][201];
struct Node
{
int p,t,d;
}node[201];
int Q,M;
int Bipartite(bool vc[][MAX],int nv1,int nv2) {
int i, j, x, n;
int q[MAX], prev[MAX], qs, qe;
int vm1[MAX], vm2[MAX];
n = 0;
for( i = 0; i < nv1; i++ ) vm1[i] = -1;
for( i = 0; i < nv2; i++ ) vm2[i] = -1;
for( i = 0; i < nv1; i++ ) {
for( j = 0; j < nv2; j++ ) prev[j] = -2;
qs = qe = 0;
for( j = 0; j < nv2; j++ ) if( vc[i][j] ) {
prev[j] = -1;
q[qe++] = j;
}
while( qs < qe ) {
x = q[qs];
if( vm2[x] == -1 ) break;
qs++;
for( j = 0; j < nv2; j++ ) if( prev[j] == -2 && vc[vm2[x]][j] ) {
prev[j] = x;
q[qe++] = j;
}
}
if( qs == qe ) continue;
while( prev[x] > -1 ) {
vm1[vm2[prev[x]]] = x;
vm2[x] = vm2[prev[x]];
x = prev[x];
}
vm2[x] = i;
vm1[i] = x;
n++;
}
return n;
}
void floyed()
{
int i,j,k;
for(k=0;k<M;k++)
{
for(i=0;i<M;i++)
{
if(f[i][k]!=INT_MAX)
{
for(j=0;j<M;j++)
if(f[i][k]+f[k][j]<f[i][j])
f[i][j]=f[i][k]+f[k][j];
}
}
}
}
int main()
{
int i,j,k,ans;
while(1)
{
scanf("%d%d",&Q,&M);
if(Q+M==0)break;
//memset(f,0,sizeof(f));
for(i=0;i<Q;i++)
for(j=0;j<Q;j++)
{
scanf("%d",&f[i][j]);
if(f[i][j]==-1)f[i][j]=INT_MAX;
}
floyed();
for(i=0;i<M;i++)
{scanf("%d%d%d",&node[i].p,&node[i].t,&node[i].d);node[i].p--;}
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
{
if(node[i].t+node[i].d+f[node[i].p][node[j].p]<=node[j].t)
dis[i][j]=1;
else dis[i][j]=0;
}
}
ans=M-Bipartite(dis,M,M);
printf("%d\n",ans);
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator