| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 869 人关注过本帖
标题:我想问一下两段代码有何不同
取消只看楼主 加入收藏
xuzc
Rank: 1
等 级:新手上路
帖 子:15
专家分:9
注 册:2016-9-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
我想问一下两段代码有何不同
#include<stdio.h>
#include<algorithm>
using namespace std;
int dfn[500000],low[500000],stack[900000],j,number,n,m,x,y,w,hh[600000],cnt,top,c,q,ans,yy[100000];
int color[400000],u,num,p[400000];
bool d[500000];
struct node
{
 int next,z,e;
}b[110000];
void add(int aa,int bb)
{
 b[++cnt].e=bb;
 b[cnt].next=hh[aa];
 hh[aa]=cnt;   
}
int tarjan(int k)
{
  int i;
  dfn[k]=low[k]=++number;
  stack[++top]=k;
  d[k]=true;
  for(i=hh[k];i!=0;i=b[i].next)   
  {
      if(!dfn[b[i].e]){
       tarjan(b[i].e);
       low[k]=min(low[k],low[b[i].e]);   
      }
     else if(d[b[i].e]==true)
     {
      low[k]=min(low[k],dfn[b[i].e]);
     }
  }
     if(dfn[k]==low[k])
     {
      color[k]=++num;
      d[k]=false;
      p[num]++;
      while(stack[top]!=k)
      {
       p[num]++;
       color[stack[top]]=num;
       d[stack[top--]]=false;
      }
      top--;
     }
  return 0;
}
int main()
{
 int i;
 scanf("%d %d",&n,&m);
 u=1;
 for(i=1;i<=m;i++)
 {
  scanf("%d %d %d",&x,&y,&w);
  if(w==1)add(x,y);
  else{
      add(x,y);add(y,x);
  }
 }
 for(j=1;j<=n;j++)
 {
  if(!dfn[j])tarjan(j);
 }
 for(i=1;i<=n;i++)
 {
  if(p[color[i]]>ans)ans=p[color[i]],u=i;   
 }
 printf("%d\n",ans);
 for(i=1;i<=n;i++)
 {
  if(color[i]==color[u])printf("%d ",i);
 }
 
 return 0;
 
 
 
 
}
以上是ac代码   但我原本tarjan里写的是
if(dfn[k]==low[k])
     {
      color[k]=++num;
      while(1)
      {
       p[num]++;
       d[top]=false;
       color[stack[top--]]=num;
       if(stack[top+1]==k)break;
      }
     }
十个点全错了,求解释两段代码难道有什么不一样吗,没看出来

[此贴子已经被作者于2016-9-13 11:29编辑过]

搜索更多相关主题的帖子: include number color 
2016-09-13 10:38
xuzc
Rank: 1
等 级:新手上路
帖 子:15
专家分:9
注 册:2016-9-13
收藏
得分:0 
这道题是codevs 1332上白泽慧音
2016-09-13 10:53
xuzc
Rank: 1
等 级:新手上路
帖 子:15
专家分:9
注 册:2016-9-13
收藏
得分:0 
http://←_←挂上原题链接
2016-09-13 11:11
xuzc
Rank: 1
等 级:新手上路
帖 子:15
专家分:9
注 册:2016-9-13
收藏
得分:0 
回复 3楼 书生牛犊
那个没有问题,我的问题只是弹栈的那段代码,两种不同的写法一种能过一种不能过
还有我并没有找到博客分享这道题,能给我链接吗

[此贴子已经被作者于2016-9-13 11:18编辑过]

2016-09-13 11:13
xuzc
Rank: 1
等 级:新手上路
帖 子:15
专家分:9
注 册:2016-9-13
收藏
得分:0 
回复 6楼 书生牛犊
对不起,我粘错了,已改正,现在可以ac了
2016-09-13 11:25
xuzc
Rank: 1
等 级:新手上路
帖 子:15
专家分:9
注 册:2016-9-13
收藏
得分:0 
回复 6楼 书生牛犊
我已经发现错误了,谢谢
2016-09-13 11:30
xuzc
Rank: 1
等 级:新手上路
帖 子:15
专家分:9
注 册:2016-9-13
收藏
得分:0 
回复 9楼 书生牛犊
两种都调至ac了
d[top]  改成dp[stack[top]]就a了(犯了个愚蠢的错误)
2016-09-13 11:53
快速回复:我想问一下两段代码有何不同
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036056 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved