| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1195 人关注过本帖
标题:一道ACM题目,难度7.4
取消只看楼主 加入收藏
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
结帖率:96.23%
收藏
已结贴  问题点数:20 回复次数:4 
一道ACM题目,难度7.4
题目链接: https://open.
图片附件: 游客没有浏览图片的权限,请 登录注册

我的代码通过了20组测试数据的前17组,第18组测试数据显示答案错误。但是ACM系统不提供具体测试数据是什么。所以我在这里希望有朋友可以给出可以通过的完全测试的代码,或者给出我代码不能通过的数据。下面是我的代码,我这代码编写时间大概40分钟,但是找错找了3个小时但是还是找不出问题所在。
如果有朋友帮我解决,我另开一贴,把我所有分(1000分)都给你。我代码本身没有语法错误,所以我就不加注释了,我只求我程序会给出错误答案的例子。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class node
{
public:
  int node_name;
  vector<int> adj;
  int value;
  int sent;
  node(int i)
  {
    node_name=i;
    value=0;
    sent=0;
  }
};
class graph
{
public:
  vector<node> node_list;
  int num;
  int mum;
  graph(int n,int m)
  {
    for(int i=0;i!=n;++i)
      {node nd(i);
       node_list.push_back(nd);
      }
    num=n;
    mum=m;
  }
  int h(vector<int> v,int n)
  {
    for(vector<int>::iterator p=v.begin();p!=v.end();++p)
      if(*p==n)
    return 1;
    return 0;
  }
  void add_edge(int from,int to)
  {
    node_list[from].adj.push_back(to);
    node_list[to].adj.push_back(from);
  }
  void run(int index,int time)
  {
    if(num==1||mum==0)
      {
    cout<<0<<endl;
    return ;
      }
    if(time==0)
      {
    cout<<0<<endl;
    return ;
      }
    if(node_list[index].adj.empty())
      {
    cout<<0<<endl;
    return ;
      }
    node_list[index].value=0;
    node_list[index].sent=1;
    vector<int> t1,t2,t3,t4;
    t1.push_back(index);
    t4=t1;
    while(time)
      {
    for(vector<int>::iterator p=t1.begin();p!=t1.end();++p)
      node_list[*p].value=0;
    while(!t1.empty())
      {
        
        for(vector<int>::iterator p=node_list[*t1.begin()].adj.begin();p!=node_list[*t1.begin()].adj.end();++p)
          {
        node_list[*p].value+=node_list[*t1.begin()].sent;
        if(!h(t3,*p))
          {
            t3.push_back(*p);
          }
            
          }
            t1.erase(t1.begin());
      }
    t1=t3;
    for(vector<int>::iterator p=t1.begin();p!=t1.end();++p)
      node_list[*p].sent=node_list[*p].value;
    /*    cout<<endl;
    for(int i=0;i!=5;++i)
      cout<<node_list[i].value<<" ";
      cout<<endl;*/
    t3.clear();
    time--;
      }
    int sum=0;
    for(int i=0;i!=num;++i)
      {
    sum+=node_list[i].value;
      }
    cout<<sum<<endl;
    return ;
  }
};
int main(void)
{
  int n,m,s,t;
  cin>>n;
  cin>>m;
  cin>>s;
  cin>>t;
  int from,to;
  if(m>n*(n-1)/2)
      return 0;
  graph g(n,m);
  while(m)
    {
      cin>>from;
      cin>>to;
      g.add_edge(from,to);
      m--;
    }
    g.run(s,t);
  return 0;
}


[此贴子已经被作者于2015-11-2 08:40编辑过]

搜索更多相关主题的帖子: include 朋友 
2015-11-02 08:36
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 4楼 rjsp
图片附件: 游客没有浏览图片的权限,请 登录注册
通过了前十八组数据测试,第十九组测试失败。楼主最近图论学的有点晕了,不管干啥都想着建立图,看到rjsp 版主的代码才有点豁然开朗的感觉。额,请小r版主再努下力帮我把这个正确做出来吧。呃,昨天是见识了在国际ACM大赛上这种难度的题,从读题到解决,顶尖选手不会超过20分钟。。。。

想抽苏烟了。
2015-11-02 13:28
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
目测国内喜欢搞算法的学生真心不多,国内的大学生都喜欢搞点什么安卓,苹果开发,什么前端,什么网页。我这里一个学姐在北京某软件公司工作八年(目测是技术骨干),现在来美国读研,前几天这学姐去亚马逊面试。亚马逊给了她两道图论的题,然后学姐就被拒绝了。。。(给出的原因:我们认为聪明的头脑远比华丽的经验更重要)。

想抽苏烟了。
2015-11-02 13:39
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 3楼 rjsp
R版对这道题有更新的代码么?你之前的代码也是没能通过所有的测试。

想抽苏烟了。
2015-11-02 23:09
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 9楼 rjsp
谢谢R版,我把我代码里的int 改为long long 以后也正确运行了。您的代码CPU 运行时间0.0S,我的代码0.01S。我一直以为我的代码不能完全通过是因为我的算法问题,我从没想过是因为我的输出结果类型不够大,整个C++板块所有版主里,您是我唯一佩服的,我一直把你当作我前进的榜样!

想抽苏烟了。
2015-11-03 09:45
快速回复:一道ACM题目,难度7.4
数据加载中...
 
   



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

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