所以……帮我调一下吧!(屑)
P3357 最长k可重线段集问题 只A了前3个点,一直都是
如图:
code:
#include<bits/stdc++.h>
#define opst 100000
#define kls 100000
using namespace std;
long long to[1000001],val[1000001],cost_[1000001],nx[1000001],fi[1000001],tot=1,vis[1000001];
long long in[1000001],dis[1000001];
long long pre[1000001],min_flow[1000001];
long long max_cost;
int all[1000001],num,qujian[1000001][5];
int duiyin[1000001];
int s,t,n,m;
queue<int>que;
void link(int a,int b,int c,int d)
{
nx[++tot]=fi[a];
fi[a]=tot;
to[tot]=b;
val[tot]=c;
cost_[tot]=d;
}
bool spfa()
{
memset(dis,-0x3f,sizeof(dis));
memset(in,0,sizeof(in));
memset(vis,0,sizeof(vis));
que.push(s);
in[s]=1;
min_flow[s]=0x7ffffffff;
dis[s]=0;
while(!que.empty())
{
int x=que.front();
que.pop();
in[x]=0;
vis[x]=1;
for(int i=fi[x];i;i=nx[i])
{
if(!val[i])
{continue;}
int v=to[i];
if(dis[v]<dis[x]+cost_[i])
{
dis[v]=dis[x]+cost_[i];
min_flow[v]=min(val[i],min_flow[x]);
pre[v]=i;
if(!in[v])
{
in[v]=1;
que.push(v);
}
}
}
}
if(!vis[t])
{
return false;
}
return true;
}
void bfs()
{
while(spfa())
{
long long x=t;
max_cost+=dis[x]*min_flow[x];
int i;
while(x!=s)
{
i=pre[x];
val[i]-=min_flow[t];
val[i^1]+=min_flow[t];
x=to[i^1];
}
}
}
bool cmp(int a,int b)
{
return a<b;
}
int main()
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>qujian[i][0]>>qujian[i][1]>>qujian[i][2]>>qujian[i][3];
qujian[i][0]+=kls;
qujian[i][1]+=kls;
qujian[i][2]+=kls;
qujian[i][3]+=kls;
qujian[i][4]=sqrt((qujian[i][2]-qujian[i][0])*(qujian[i][2]-qujian[i][0])+(qujian[i][3]-qujian[i][1])*(qujian[i][3]-qujian[i][1]));
if(qujian[i][0]>qujian[i][2])
{
swap(qujian[i][0],qujian[i][2]);
}
qujian[i][0]<<=1;
qujian[i][2]<<=1;
if(qujian[i][0]==qujian[i][2])
{
qujian[i][2]++;
}
else
{
qujian[i][0]++;
}
all[++num]=qujian[i][0];
all[++num]=qujian[i][2];
}
sort(all+1,all+num+1,cmp);
num=unique(all+1,all+num+1)-all;
s=0;
t=num;
for(int i=0;i<num;i++)
{
link(i,i+1,k,0);
link(i+1,i,0,0);
duiyin[all[i]]=i;
}
for(int i=1;i<=n;i++)
{
link(duiyin[qujian[i][0]],duiyin[qujian[i][2]],1,qujian[i][4]);
link(duiyin[qujian[i][2]],duiyin[qujian[i][0]],0,-qujian[i][4]);
}
bfs();
cout<<max_cost<<endl;
}