hdu 5631 Rikka with Graph(图)
n个点最少要n-1条边才能连通,可以删除一条边,最多删除2条边,然后枚举删除的1条边或2条边,用并查集判断是否连通,时间复杂度为O(n^3)
这边犯了个错误,
for(int i=0;i<N;i++){
fa[i]=i;
}
这个将i<=N,导致错误,值得注意
AC代码:
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<math.h>
- #include<algorithm>
- #include<queue>
- #include<set>
- #include<bitset>
- #include<map>
- #include<vector>
- #include<stdlib.h>
- #include <stack>
- using namespace std;
- #define PI acos(-1.0)
- #define max(a,b) (a) > (b) ? (a) : (b)
- #define min(a,b) (a) < (b) ? (a) : (b)
- #define ll long long
- #define eps 1e-10
- #define MOD 1000000007
- #define N 106
- #define inf 1e12
- int n,fa[N],a[N],b[N];
- void init(){
- for(int i=;i<N;i++){
- fa[i]=i;
- }
- }
- int find(int x){
- return fa[x]==x?x:fa[x]=find(fa[x]);
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--){
- scanf("%d",&n);
- for(int i=;i<=n;i++){
- scanf("%d%d",&a[i],&b[i]);
- }
- int ans=;
- for(int i=;i<=n;i++){//删除一条边
- init();
- int cnt=n;
- for(int j=;j<=n;j++){
- if(j!=i){
- int root1=find(a[j]);
- int root2=find(b[j]);
- if(root1!=root2){
- fa[root1]=root2;
- cnt--;
- }
- }
- }
- if(cnt==) ans++;
- }
- for(int i=;i<=n;i++){//删除两条边
- for(int j=i+;j<=n;j++){
- init();
- int cnt=n;
- for(int k=;k<=n;k++){
- if(k!=i && k!=j){
- int root1=find(a[k]);
- int root2=find(b[k]);
- if(root1!=root2){
- fa[root1]=root2;
- cnt--;
- }
- }
- }
- if(cnt==)ans++;
- }
- }
- printf("%d\n",ans);
- }
- return ;
- }
贴上别人写bfs代码:
- #include<cstdio>
- #include<cstring>
- int n,m;
- struct note{
- int to,next;
- }a[];
- int head[];
- bool used[];
- bool des[];
- int que[];
- bool bfs(){
- memset(used,false,sizeof(used));
- int start=,aim=;
- que[aim++]=;
- used[]=true;
- while(start<aim){
- int num=que[start++];
- for(int i=head[num];i!=-;i=a[i].next){
- if(!des[i])continue;
- if(used[a[i].to])continue;
- used[a[i].to]=true;
- que[aim++]=a[i].to;
- }
- }
- bool judge=true;
- for(int i=;i<=n;i++){
- if(!used[i])judge=false;
- }
- return judge;
- }
- int main(){
- int T;
- // freopen("5631.txt","r",stdin);
- scanf("%d",&T);
- while(T--){
- scanf("%d",&n);
- int coun=;
- memset(head,-,sizeof(head));
- m=n;
- for(int i=;i<=m;i++){
- int x,y;
- scanf("%d%d",&x,&y);
- a[coun].to=y;
- a[coun].next=head[x];
- head[x]=coun++;
- a[coun].to=x;
- a[coun].next=head[y];
- head[y]=coun++;
- }
- int ans=;
- memset(des,true,sizeof(des));
- for(int i=;i<=m;i++){
- for(int j=i+;j<=m;j++){
- des[i<<]=des[i*+]=des[j*]=des[j*+]=false;
- if(bfs())ans++;
- des[i<<]=des[i*+]=des[j*]=des[j*+]=true;
- }
- }
- for(int i=;i<=m;i++){
- des[i<<]=des[i*+]=false;
- if(bfs())ans++;
- des[i<<]=des[i*+]=true;
- }
- printf("%d\n",ans);
- }
- return ;
- }
hdu 5631 Rikka with Graph(图)的更多相关文章
- HDU 5631 Rikka with Graph 暴力 并查集
Rikka with Graph 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5631 Description As we know, Rikka ...
- HDU 5631 Rikka with Graph
如果原图不连通,直接输出0. 如果原图连通,删除X条边之后要保证新图连通,再看数据是n+1条边-->因此,最多只能删去两条边. 因为n=100,可以枚举进行验证,枚举删去每一条边是否连通,枚举删 ...
- HDU 5422 Rikka with Graph
Rikka with Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HDU 5424——Rikka with Graph II——————【哈密顿路径】
Rikka with Graph II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU 6090 Rikka with Graph
Rikka with Graph 思路: 官方题解: 代码: #include<bits/stdc++.h> using namespace std; #define ll long lo ...
- HDU 6090 Rikka with Graph —— 2017 Multi-University Training 5
Rikka with Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- hdu 5424 Rikka with Graph II(dfs+哈密顿路径)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so h ...
- 2017ACM暑期多校联合训练 - Team 5 1006 HDU 5205 Rikka with Graph (找规律)
题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...
- hdu 5424 Rikka with Graph II (BestCoder Round #53 (div.2))(哈密顿通路判断)
http://acm.hdu.edu.cn/showproblem.php?pid=5424 哈密顿通路:联通的图,访问每个顶点的路径且只访问一次 n个点n条边 n个顶点有n - 1条边,最后一条边的 ...
随机推荐
- C++私有构造函数
一. 类的构造函数一般是public的,但是也可以是private的.构造函数为私有的类有这样的特点: <1>不能实例化:因为实例化时类外部无法访问其内部的私有的构造函数: <2&g ...
- hdu 5642 King's Order(数位dp)
Problem Description After the king's speech , everyone is encouraged. But the war is not over. The k ...
- BackgroundWorker用法
BackgroundWorker主要用来提供后台运算服务(防止用户前台无响应等待),并提供服务进度的类: 代码如下: BackgroundWorker bgw = new BackgroundWork ...
- web前端之 HTML介绍
概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...
- Sort(归并)
Sort 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 You want to processe a sequence of n distinct integers ...
- All X(思维)
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...
- 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题
我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用 ...
- [置顶] Java中发邮件的6种方法
1.官方标准JavaMail Sun(Oracle)官方标准,功能强大,用起来比较繁琐. 官方资料:http://www.oracle.com/technetwork/java/javamail/in ...
- [HeadFirst-HTMLCSS学习笔记][第十二章HTML5标记]
考虑HTML结构 HTML5即是把原来<div>换成一些更特定的元素.能够更明确指示包含什么内容. (页眉,导航,页脚,文章) article nav 导航 header footer t ...
- ListView加载两种以上不同的布局
不同的项目布局(item layout) Listview一种单一的item 布局有时候不能完全满足业务需求,我们需要加载两种或两种以上不同的布局,实现方法很简单: 重写 getViewTypeCou ...