sgu213-Strong Defence

题目大意:

给你一个无向图,然后一个s,t表示起点和终点,然后输入n,m,s,t,将m条无相边分成L个集合,使得任意一个集合的边被去掉后,都不能从t到达s(或者是s到达t,具体不记得了,但是差不多吧。。。。。),然后要你求出最大的L,然后输出每一个边集。

解题思路:

首先看到要使得不能到达,我想到了网络流,但是后来想想发现,其实很简单。

先以s为起点跑一遍最短路,然后会得到一个dis[t]表示s到t的最短距离,然后L=dis[t]

之后就是将边分组,对于i=1~dis[t],边<u,v>(我们假设dis[u]<=dis[v])如果满足dis[u]+1=dis[v],那么就将这条边加入第dis[v]个集合中去,其他不满足的边就随便放就好了。

具体算法的正确性就不给予证明了。

AC代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <vector>
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)>(b)?(b):(a))

using namespace std;
int n,m,s,t;
struct bian_
{
	int num;
	int next;
}bian[160010]={{0,0}};
int g[160010][2]={{0}};
int First[410]={0};
int dis[410]={0};
int hash[410]={0};
int dui[1000010]={0};

inline void Add(int p,int q,int k)
{
	bian[k].num=q;
	bian[k].next=First[p];
	First[p]=k;
	return;
}

void SPFA()
{

	int duip=1;
	memset(dis,0x3f3f3f3f,sizeof(dis));
	dis[s]=0;
	dui[duip]=s;
	hash[s]=1;
	for(int i=1;i<=duip;i++)
	{
		for(int p=First[dui[i]];p!=0;p=bian[p].next)
		{
			if(dis[dui[i]]+1<dis[bian[p].num] && hash[bian[p].num]==0)
			{
				hash[bian[p].num]=1;
				dui[++duip]=bian[p].num;
				dis[bian[p].num]=dis[dui[i]]+1;
			}
		}
		hash[dui[i]]=0;
	}
	return;
}

int main()
{
	scanf("%d%d%d%d",&n,&m,&s,&t);
	for(int i=1;i<=m;i++)
	{
		int p,q;
		scanf("%d%d",&p,&q);
		Add(p,q,i*2-1);
		Add(q,p,i*2);
		g[i][0]=p;
		g[i][1]=q;
	}

	SPFA();

	vector <int> ans[410];
	for(int i=1;i<=m;i++)
	{
		int p=dis[g[i][0]],q=dis[g[i][1]];
		if(p>q) swap(p,q);
		if(q==p+1)
		{
			if(q>=dis[t])
				ans[dis[t]].push_back(i);
			else ans[q].push_back(i);
		}
		else ans[dis[t]].push_back(i);
	}

	printf("%d\n",dis[t]);
	for(int i=1;i<=dis[t];i++)
	{
		printf("%d ",ans[i].size());
		for(int j=ans[i].size()-1;j>=0;j--)
			printf("%d%c",ans[i][j],j==0?'\n':' ');
	}
	return 0;
}
时间: 2024-12-10 03:32:38

sgu213-Strong Defence的相关文章

SGU 210 ~ 219

点击标题查看代码 210. Beloved Sons 题意:国王要给王子们安排婚事,每个王子都有一个权重Ai,目标是使所有与心爱女孩结婚的王子们的权重的2范数最大. 二分图匹配即可,因为匈牙利算法的贪心性质,会使排在前面的王子先找到配偶,这样,如果后面有王子无法匹配,一定是与前面的王子发生冲突,但是如果修改的话,答案不会更优. 211. Strange Counter 题意:给定一个counter表示数的方法如下 A[N-1] * 2^(N-1) + A[N-2] * 2^(N-2) + ...

ASP.NET Core CSRF defence with Antiforgery

Cross Site Request Forgery (aka CSRF or XSRF) is one of the most common attacks in which the user is tricked into executing an unwanted action through his browser on his behalf, in one of the sites he is currently authenticated. ASP.Net Core contains

Strong local nondeterminism for fBm

Let $B^\alpha$ be an $(N,1)$-fractional Brownian motion with index $\alpha\in(0,1).$ Pitt (Local times for Gaussian vector fields, Indiana Univ. Math. J. 1978) proved that $B^\alpha$ satisfies the following Strong local nondeterminism: there exists a

assign,copy,strong,weak,nonatomic的具体理解

例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段内存用来存储@' MM的三室两厅 ' ,比如:内存地址为 0X1111  内容为 ' MM的三室两厅' ,  2 在栈上分配一段内存用来存储 houseForWife ,比如:地址为 0XAAAA  内容自然为 0X1111 下面分别看下(assign,retain,copy):  1.assign的情

assign, retain, weak, strong, copy,unsafe_unretain

readonly, readwrite:是控制属性的访问权限,readonly只生成getter方法,其他类是无法修改其值的.readwrite是会同时生成getter和setter方法,其他类可以修改其值. assign, retain, weak, strong, copy,unsafe_unretained:在non-ARC中,assign和retain是一组,assign的对象属性引用计数不变,而retain会被+1.对应的在ARC中,weak和strong是一组,weak的对象属性引用

[郭襄跳崖]戏说arc下的weak和strong

strong: 只要我还strong引用着你,你就不会被dealloc. weak:   我只是weak引用你.只有存在别人strong引用着你,我对你的weak引用才是有效的. 这就像郭襄跳断肠崖,郭靖黄蓉拍马赶到,都伸手抓住了郭襄,形成了2个strong引用.郭芙后面赶到,只能眼睁睁看着,是一个weak引用,能看到郭襄,是因为有郭靖黄蓉2个strong引用. 如果郭靖黄蓉没拉住,两个strong引用置为nil了,则郭芙的眼神引用即weak引用就立即失效--郭襄跳入深崖,看不见了(deallo

copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理

copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效.更深入的讨论,请参考“复制”部分. retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1对其他NSObject和其子类对参数进行release旧值,再retain新值指定retain会在赋值时唤醒传入值的retain消息.此属性只能用于Objective

b与strong ,i与em的区别

1)b与strong的区别 b和strong标签,在网页中默认的情况下均是加粗字体的作用: b标签是一个实体标签,它所包含的字符将被设为blod粗体,是html语言中的:---视觉化 strong标签是一个逻辑标签,作用是为了加强语气而加粗字体,是xhtml中的,其强调作用,可以用css标 签控制strong强调的方式.----语义化标签 在符合w3c的标准,推荐使用strong标签---语义化 2)i与em的区别 em标签告诉浏览器把其中的文本表示为强调的内容.i标签可以用来把这些名称和其他斜

【iOS面试系列-1】iOS中@property 后assign,copy,retain,weak,strong的意义与区别(必考-必须详细掌握)

来源:网络 assign: 普通(简单)赋值,一般常用于基本数据类型,常见委托设计模式,一次来防止循环引用.不更改索引计数(Reference Counting). 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等) retain:保留计数,获得到了对象的所有权,引用计数在原有基础上+1.释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 .我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用

&lt;strong&gt;加粗 and &lt;em&gt;斜体

<strong> 标签中的内容,通常是用加粗的字体(相对于斜体<em>)来显示其中的内容 源码: <body> <strong>徐志摩人物简介</strong> <p> <em>1910</em>年入杭州学堂<br/> <em>1918</em>年赴美国克拉大学学习银行学<br/> <em>1921</em>年开始创作新诗<br/&g