Rikka with Graph
Accepts: 123
Submissions: 525
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
并查集。
暴力删除一条或者两条边。O(N^3)
// Yu 20160221
//bestcoder Rikka with Graph
#include<iostream>
//#include<stdlib.h>
//#include<string.h>
using namespace std;
#define MAX_N 103
int set[MAX_N];
pair<int,int> p[MAX_N];
int find(int x)
{
int r=x;
while(set[r]!=r)
r=set[r];
return r;
}
int merge(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy) return 0;
else
set[fx]=fy;
return 1;
}
int main()
{
int T;
int n;
long count,num;
cin>>T;
while(T--)
{
num=0;
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>p[i].first>>p[i].second;
}
for(int i=0;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
count=n;
for(int l=0;l<=n;l++)
{
set[l]=l;
}
for(int k=0;k<=n;k++)
{
if(k!=i&&k!=j)
{
if(merge(p[k].first,p[k].second)==1)
count--;
}
}
if(count==1)
num++;
}
}
cout<<num<<endl;
}
}
本文介绍了一个关于图论的问题“RikkawithGraph”,该问题要求在给定的非定向图中删除部分边以确保剩余的图保持连通,并计算所有可能的删除方案数量。文章提供了一种通过并查集实现的解决方案,该方法涉及暴力删除一条或两条边,时间复杂度为O(N^3)。
610

被折叠的 条评论
为什么被折叠?



