| ||||||||||
| 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 | |||||||||
帮忙找一组能卡掉这个代码的数据#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
const int N=1005, M=1e6;
struct edge{
int to, nt, id;
}E[M];
int head[N], id;
bool g[N][N];
void add(int u, int v){
E[id]=(edge){v, head[u], 0}; head[u]=id++;
E[id]=(edge){u, head[v], 0}; head[v]=id++;
}
bool ok[N];
bool label(int u, int id){
ok[u]=true;
for(int i=head[u]; ~i; i=E[i].nt){
if(E[i].id!=id) continue;
int &v=E[i].to;
if(!ok[v]) label(v, id);
}
}
int col[N];
bool color(int u, int c, int id){
col[u]=c;
for(int i=head[u]; ~i; i=E[i].nt){
if(E[i].id!=id) continue;
int &v=E[i].to;
if(!col[v]&&!color(v, -c, id)) return false;
if(col[v]==col[u]) return false;
}
return true;
}
stack<int> st;
int low[N], dfn[N], ts;
void dfs(int u, int f){
low[u]=dfn[u]=++ts;
for(int i=head[u]; ~i; i=E[i].nt){
int &v=E[i].to;
if(!dfn[v]){
st.push(i);
dfs(v, i>>1);
low[u]=min(low[u], low[v]);
if(low[v]>=dfn[u]){
++id;
for(;;){
int top=st.top(); st.pop();
E[top].id=id;
if(top==i) break;
}
memset(col, 0, sizeof(col));
if(!color(u, 1, id)){
label(u, id);
}
}
}
else if(i>>1!=f&&dfn[u]>dfn[v]){
st.push(i);
low[u]=min(low[u], dfn[v]);
}
}
}
int main(){
//freopen("in", "r", stdin);
int n, m, u, v;
while(scanf("%d%d", &n, &m), n){
memset(head, -1, sizeof(head));
memset(g, 0, sizeof(g));
id=0;
while(m--){
scanf("%d%d", &u, &v);
g[u][v]=g[v][u]=true;
}
for(int i=1; i<=n; i++)for(int j=i+1; j<=n; j++){
if(!g[i][j]) add(i, j);
}
id=ts=0;
memset(dfn, 0, sizeof(dfn));
memset(ok, 0, sizeof(ok));
for(int i=1; i<=n; i++) if(!dfn[i]) dfs(i, -1);
int res=0;
for(int i=1; i<=n; i++){
if(!ok[i]) res++;
}
printf("%d\n", res);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator