| ||||||||||
| 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 | |||||||||
求大牛相助!!无限wr中!!为什么!!#include<iostream>
using namespace std;
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<stack>
#include<algorithm>
#define MAXM 300*300
#define MAXN 300
#define oo 0x7fffffff
struct Dinic
{
struct node
{
int x,y,c,next;
}line[MAXM];
int Lnum,_next[MAXN],dis[MAXN];
void initial(int n)
{
for (int i=0;i<=n;i++) _next[i]=-1;
Lnum=-1;
}
void addline(int x,int y,int c)
{
line[++Lnum].next=_next[x],_next[x]=Lnum;
line[Lnum].x=x,line[Lnum].y=y,line[Lnum].c=c;
line[++Lnum].next=_next[y],_next[y]=Lnum;
line[Lnum].x=y,line[Lnum].y=x,line[Lnum].c=0;
}
bool BFS(int s,int e)
{
queue<int> Q;
while (!Q.empty()) Q.pop();
memset(dis,0,sizeof(dis));
dis[s]=1;
Q.push(s);
while (!Q.empty())
{
int h,k;
h=Q.front(),Q.pop();
if (h==e) return dis[e];
for (k=_next[h];k!=-1;k=line[k].next)
if (line[k].c && !dis[line[k].y])
dis[line[k].y]=dis[h]+1,Q.push(line[k].y);
}
return false;
}
int dfs(int x,int flow,int e)
{
if (x==e) return flow;
int temp,cost=0;
for (int k=_next[x];k!=-1;k=line[k].next)
if (line[k].c && dis[line[k].y]==dis[x]+1)
{
temp=dfs(line[k].y,min(flow-cost,line[k].c),e);
if (temp)
{
line[k].c-=temp,line[k^1].c+=temp;
cost+=temp;
if (flow==cost) return cost;
}else dis[line[k].y]=-1;
}
return cost;
}
int MaxFlow(int s,int e)
{
int MaxFlow=0;
while (BFS(s,e))
MaxFlow+=dfs(s,oo,e);
return MaxFlow;
}
}T;
double d(int x,int y,int x1,int y1)
{
double a=(x-x1)*(x-x1)*1.0;
double b=(y-y1)*(y-y1)*1.0;
return sqrt(a+b);
}
double dis[220][220];
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
int n,sum=0,i,j,k;
double D;
int g[220][4];
//cin >> n >> D;
scanf("%d %lf",&n,&D);
for (i=1;i<=n;++i)
{
scanf("%d %d %d %d",&g[i][0],&g[i][1],&g[i][2],&g[i][3]);
sum+=g[i][2];
}
for (i=1;i<=n;++i)
for (j=i+1;j<=n;++j)
dis[i][j]=dis[j][i]=d(g[i][0],g[i][1],g[j][0],g[j][1]);
int flag=0;
int N=2*n+1;
for (i=1;i<=n;++i)
{
T.initial(N);
for (j=1;j<=n;++j)
{
T.addline(0,j,g[j][2]);
T.addline(j,j+n,g[i][3]);
}
for (j=1;j<=n;++j)
for (k=j+1;k<=n;++k)
if (dis[j][k]<=D)
{T.addline(n+j,k,oo);T.addline(n+k,j,oo);}
if (T.MaxFlow(0,i)==sum)
{
if (flag==0) printf("%d",i-1);
else printf(" %d",i-1);
flag=1;
}
}
if (!flag) printf("-1\n");
else printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator