题面:
这个是真不会。。。。。。
代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<map>
#include<vector>
#define ll long long
#define llu unsigned ll
using namespace std;
const int maxn=620; //内存开点数的1.5倍
const int inf=0x3f3f3f3f;
struct node
{
int x,y,z;
node(){
}
node(int a,int b,int c)
{
x=a,y=b,z=c;
}
}g[maxn][maxn];
int n,m,nx,t,lab[maxn],match[maxn],slack[maxn];
int st[maxn],pa[maxn],flower_from[maxn][maxn],S[maxn],vis[maxn];
vector<int>flower[maxn];
deque<int>q;
int dist(node e)
{
return lab[e.x]+lab[e.y]-g[e.x][e.y].z*2;
}
void update_slack(int x,int y)
{
if(!slack[y]||dist(g[x][y])<dist(g[slack[y]][y]))
slack[y]=x;
}
void set_slack(int y)
{
slack[y]=0;
for(int x=1;x<=n;x++)
if(g[x][y].z>0&&st[x]!=y&&S[st[x]]==0)
update_slack(x,y);
}
void q_push(int x)
{
if(x<=n) return q.push_back(x);
for(int i=0;i<flower[x].size();i++) q_push(flower[x][i]);
}
void set_st(int x,int b)
{
st[x]=b;
if(x<=n) return;
for(int i=0;i<flower[x].size();i++) set_st(flower[x][i],b);
}
int get_pr(int b,int xr)
{
int pr=find(flower[b].begin(),flower[b].end(),xr)-flower[b].begin();
if(pr%2==1)
{
reverse(flower[b].begin()+1,flower[b].end());
return flower[