| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:In Reply To:过是过了,不过代码太长,问下800K的代码怎么写? Posted by:zjmwqx at 2009-06-19 11:34:55 #include <cstdio>
#include <bitset>
using namespace std;
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0' || c>'9'){if (c=='-')f=-1;c=getchar();}
while (c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-48;c=getchar();}
return x*f;
}
const int MAXN=40;
int n;
bitset<MAXN> g[MAXN];
bitset<MAXN> down;
void init()
{
for (int i=1;i<=36;i++)g[i].reset();
int a,b;
n=read();
for (int i=1;i<=n;i++)
{
a=read();b=read();
g[a].set(b);
}
}
bool dfs(int vis,int now,int need,bitset<MAXN> down)
{
if (down.count()<need)return false;
if (now==need)return true;
if (now+36-vis<need)return false;
return (dfs(vis+1,now,need,down)||dfs(vis+1,now+1,need,down&g[vis]));
}
void work()
{
down.set();
int i;
for (i=2;i*i<=n;i++)if (!dfs(1,0,i,down))break;
printf("%d\n",i-1);
}
int main()
{
int cas;cas=read();
while (cas--)
{
init();
work();
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator