并查集
TLE了N次,要注意数的构造,防止深度太大,搜起来费时。
第一次用STL写的,悲剧的TLE了
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
vector< list<int> > u;
vector< list<int> >::iterator it,ita,itb;
list<int>::iterator itla,itlb;
int n,a,b,max;
bool uaf,ubf;
while (scanf("%d",&n))
{
max=0;
u.clear();
while (n--)
{
uaf=false;
ubf=false;
scanf("%d%d",&a,&b);
for (it=u.begin(); it!=u.end(); it++)
{
itla = find(it->begin(), it->end(), a);
itlb = find(it->begin(), it->end(), b);
if (itla!=it->end()) { ita=it; uaf=true; }
if (itlb!=it->end()) { itb=it; ubf=true; }
if (uaf && ubf) break;
}
/* cout<<"uaf="<<uaf<<" ubf="<<ubf<<endl;*/
if (uaf && ubf)
{
ita->splice(ita->begin(), *itb);
itb=u.erase(itb);
TLE了N次,要注意数的构造,防止深度太大,搜起来费时。
第一次用STL写的,悲剧的TLE了
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
vector< list<int> > u;
vector< list<int> >::iterator it,ita,itb;
list<int>::iterator itla,itlb;
int n,a,b,max;
bool uaf,ubf;
while (scanf("%d",&n))
{
max=0;
u.clear();
while (n--)
{
uaf=false;
ubf=false;
scanf("%d%d",&a,&b);
for (it=u.begin(); it!=u.end(); it++)
{
itla = find(it->begin(), it->end(), a);
itlb = find(it->begin(), it->end(), b);
if (itla!=it->end()) { ita=it; uaf=true; }
if (itlb!=it->end()) { itb=it; ubf=true; }
if (uaf && ubf) break;
}
/* cout<<"uaf="<<uaf<<" ubf="<<ubf<<endl;*/
if (uaf && ubf)
{
ita->splice(ita->begin(), *itb);
itb=u.erase(itb);