BZOJ 1001 最短路求最小割

        对于这道题,是一个裸的求一张图最小割的问题,可是数据太大,dinic过不了,注意到题目中的图是平面图,因此我们可以通过将平面图转化为对偶图的形式在对偶图中跑最短路,这样就可以用SPFA或堆优化的dijkstra来做了
#include
#include
#include
#include
using namespace std;
#define maxn 2000005
int last[3*maxn],other[3*maxn],pre[3*maxn],len[3*maxn];
int a[1001][1001],b[1001][1001],c[1001][1001];
int l,tot,n,m,dis[maxn],que[2*maxn],vis[maxn];

void connect(int x,int y,int z)
{
	//printf("%d %d %d\n",x,y,z);
	l++;
	pre[l]=last[x];
	last[x]=l;
	other[l]=y;	
	len[l]=z;
	//printf("%d %d %d\n",x,y,z);
}

void spfa(int s)
{
	memset(dis,53,sizeof dis);
	int h=0,t=1;
	que[1]=s;dis[s]=0;
	while (h!=t)
	{
		h=h%2000000+1;
		int u=que[h];vis[u]=0;
		for (int p=last[u];p;p=pre[p]) 
		{
			int v=other[p];
			if (dis[v]>dis[u]+len[p]) 
			{
				dis[v]=dis[u]+len[p];
				if (!vis[v]) 
				{
					int temp=dis[que[h%2000000+1]];
					if (dis[v]


你可能感兴趣的:(最短路)