关于玄学80TLE
查看原帖
关于玄学80TLE
533069
Khaleesi楼主2021/10/22 16:33
//愿天堂没有TLE 
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
int ji=1;
int ans,cnt;
const int maxn=1000010;
inline int read()
{
	register int X=0; bool flag=1; char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
	while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
	if(flag) return X;
	return ~(X-1);
}
inline void write(register int X)
{
	if(X<0) {X=~(X-1); putchar('-');}
	if(X>9) write(X/10);
	putchar(X%10+'0');
}
int mmax;
struct h
{
	int from,to;
}edge[2*maxn];
int head[2*maxn];
int use[maxn];
int ma[maxn];
void add_edge(register int from,register int to)
{
	edge[++cnt].from=head[from];
	edge[cnt].to=to;
	head[from]=cnt;
}
bool find(register int now)
{
	for(register int i=head[now];i;i=edge[i].from)
	{
		register int pro=edge[i].to;
		if(!use[pro])
		{
			use[pro]=1;
			if(!ma[pro]||find(ma[pro]))
			{
				ma[pro]=now;
				return 1;
			}
		}
		
	}
	return 0;
}
int main()
{
	n=read();
	for(register int i=1;i<=n;i++)
	{
		register int s1,s2;
		s1=read();
		s2=read();
		if(s1<=n)
		{
			add_edge(s1,i);
		 } 
		if(s2<=n)
		{
			add_edge(s2,i);
		}
	
	}
	for(register int i=1;i<=n;i++)
		{
			memset(use,0,sizeof(use));
			if(!find(i))
			{
				write(i-1);
				return 0;
			}
		}

	write(n);
	return 0;	
 } 

我直接去世了,并调了一下午,加了快读快输,卡常了一大堆,最后发现把use数组改成bool型就过了???

2021/10/22 16:33
加载中...