一道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编辑过]