| ||||||||||
| 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 | |||||||||
两个wa得程序,希望得到好心人的数据,谢谢No.1
#include <stdio.h>
struct stct0{
int v,next;
}edge[200010];
int mark[100010],headg[100010],edgeN,deg[100010],q[100010],tail;
void addedge(int u,int v){
edge[edgeN].v=v;
edge[edgeN].next=headg[u];
headg[u]=edgeN++;
deg[u]++;
return;
}
int dfs(int pos){
int i,rem;
if(mark[pos]==1) return 0;
//printf("##%d",pos+1);
mark[pos]=1,deg[pos]--;
//printf(" %d\n",deg[pos]);
for(i=headg[pos];~i;i=edge[i].next) if(mark[edge[i].v]==0) if((--deg[edge[i].v])==1) q[tail++]=edge[i].v;
for(i=headg[pos];~i;i=edge[i].next){
if(mark[edge[i].v]==0&&(deg[pos]<=0||deg[edge[i].v]<=1)){
dfs(edge[i].v);
break;
}
}
return 1;
}
main(){
int n,i,tot,u,v,j;
while(~scanf("%d",&n)){
for(edgeN=0,i=0;i<n;i++) headg[i]=-1,mark[i]=0,deg[i]=0;
for(i=1;i<n;i++) scanf("%d%d",&u,&v),addedge(u-1,v-1),addedge(v-1,u-1);
for(tail=0,i=0;i<n;i++) if(deg[i]==1) q[tail++]=i;
for(i=0,tot=0;i<tail;i++){
tot+=dfs(q[i]);
//printf("--\n");
}
// for(i=0;i<tail;i++) printf("^%d\n",q[i]+1);
printf("%d\n",tot);
}
return 0;
}
No.2
#include <stdio.h>
struct stct0{
int v,next;
}edge[200020];
int tot,edgeN;
int headg[100010],mark[100010],deg[100010];
void dfs(int pos,int _f){
int i,flag;
//printf("#%d %d\n",pos+1,_f);
mark[pos]=1;
flag=1+_f;
if(deg[pos]>=3){
for(i=headg[pos];~i;i=edge[i].next){
if(mark[edge[i].v]==0){
if(deg[edge[i].v]<3){
flag--;
}
}
}
}
if(flag<0) flag=0;
for(i=headg[pos];~i;i=edge[i].next){
if(mark[edge[i].v]==0){
if(deg[pos]>=3){
if(deg[edge[i].v]>=3){
if(flag) flag--,dfs(edge[i].v,0);
else tot--,dfs(edge[i].v,1);
}else dfs(edge[i].v,0);
}else dfs(edge[i].v,0);
}
}
return;
}
void addedge(int u,int v){
edge[edgeN].v=v;
edge[edgeN].next=headg[u];
headg[u]=edgeN++;
deg[u]++;
return;
}
main(){
int i,n,u,v;
while(~scanf("%d",&n)){
for(i=0,edgeN=0;i<n;i++) headg[i]=-1,mark[i]=0,deg[i]=0;
for(i=0;i<n-1;i++) scanf("%d%d",&u,&v),addedge(u-1,v-1),addedge(v-1,u-1);
for(tot=-1,i=0;i<n;i++) tot+=(deg[i]==1);
for(i=0;deg[i]-1;i++);
dfs(i,0);
printf("%d\n",tot);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator