杭电1102

wsxxiaohao 2012-07-17 11:09:55
菜鸟求助:杭电1102题。http://acm.hdu.edu.cn/showproblem.php?pid=1102
我做过好多次测试了,好像都没有发现什么问题,但是交了几次都是WA。希望各位大佬能帮帮忙啊。

#include <stdio.h>
#include<iostream>
#include <set>
#include <list>
using namespace std;
//1102

int nPath[100][100];

int main()
{
list<set<int> > setlist;
set<int> tmpset,tmpset1;
int nVillage,nTmp1,nTmp2;
int i,j,nRes=0;
bool bTag;
list<set<int> >::iterator it;
set<int>::iterator itset;
while(scanf("%d",&nVillage)!=EOF){
for(i=0;i<nVillage;i++)
for(j=0;j<nVillage;j++)
scanf("%d",&nPath[i][j]);

scanf("%d",&i);
for (j=0;j<i;j++)
{
scanf("%d%d",&nTmp1,&nTmp2);
bTag = false;
for ( it = setlist.begin();it!=setlist.end();++it)
{
tmpset = *it;
for (itset = tmpset.begin();itset!=tmpset.end();++itset)
{
if (*itset == nTmp1-1)
{
it->insert(nTmp2-1);
nRes += nPath[*itset][nTmp2-1];
bTag = true;
break;
}
else if ( *itset == nTmp2-1)
{
it->insert(nTmp1-1);
nRes+= nPath[*itset][nTmp1-1];
bTag = true;
break;
}
}
if (bTag)
{
break;
}
}
if (it == setlist.end())
{
tmpset.clear();
tmpset.insert(nTmp1-1);
tmpset.insert(nTmp2-1);
setlist.push_back(tmpset);
}
}
for (i=0;i<nVillage;i++)
{
bTag = false;
for ( it = setlist.begin();it!=setlist.end();++it)
{
tmpset = *it;
for (itset = tmpset.begin();itset!=tmpset.end();++itset)
{
if (*itset==i)
{
bTag=true;
break;
}
}
if (bTag)
{
break;
}
}
if (it == setlist.end())
{
if (nPath[i][0]!=0)
{
nTmp1 = nPath[i][0];
}
else
nTmp1 = nPath[i][1];

for(j=0;j<nVillage;j++)
{
if (nPath[i][j]!=0 && nPath[i][j]<nTmp1)
{
nTmp1 = nPath[i][j];
nTmp2 = j;
}
}
//search for j
bTag = false;
for ( it = setlist.begin();it!=setlist.end();++it)
{
tmpset = *it;
for (itset = tmpset.begin();itset!=tmpset.end();++itset)
{
if (*itset==nTmp2)
{
bTag=true;
break;
}
}
if (bTag)
{
break;
}
}
if (bTag==false)
{//no
tmpset.insert(i);
tmpset.insert(nTmp2);
nRes += nPath[i][nTmp2];
setlist.push_back(tmpset);
}
else
{//yes
it->insert(i);
nRes += nPath[nTmp2][i];
}
}
}

while (setlist.size()!=1)
{
tmpset = setlist.back();
setlist.pop_back();
it = setlist.begin();
set<int>::iterator itset2 = (*it).begin();
itset=tmpset.begin();
nTmp1 = nPath[*itset2][*itset];
//nTmp1 as mimi value
for (;itset2!=(*it).end();++itset2)
{
for (itset=tmpset.begin();itset!=tmpset.end();++itset)
{
if (nPath[*itset2][*itset]<nTmp1)
{
nTmp1 = nPath[*itset2][*itset];
}
}
}
nRes += nTmp1;
it = setlist.begin();
it->insert(tmpset.begin(),tmpset.end());
}

printf("%d\n",nRes);
setlist.clear();
nRes = 0;
}
return 0;
}
...全文
219 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsxxiaohao 2012-07-19
  • 打赏
  • 举报
回复
这个问题没有解决。但是还是结贴吧。
wsxxiaohao 2012-07-18
  • 打赏
  • 举报
回复
哎,还有没有大侠帮忙的啊??
wsxxiaohao 2012-07-18
  • 打赏
  • 举报
回复
来个大牛来帮忙啥。人呢???
W170532934 2012-07-17
  • 打赏
  • 举报
回复
这地方插入的时候是不是不需要计算nRes??

if (*itset == nTmp1-1)
{
it->insert(nTmp2-1);
nRes += nPath[*itset][nTmp2-1];//?????
bTag = true;
break;
}
else if ( *itset == nTmp2-1)
{
it->insert(nTmp1-1);
nRes+= nPath[*itset][nTmp1-1];//???????
bTag = true;
break;
}
DeDeWo 2012-07-17
  • 打赏
  • 举报
回复
自己慢慢调吧,这是必须经历的过程,不然比赛的时候会更痛苦的
wsxxiaohao 2012-07-17
  • 打赏
  • 举报
回复
没有人来回复了吗?帖子沉了啊?
wsxxiaohao 2012-07-17
  • 打赏
  • 举报
回复
谢谢你到提醒,但是这个去掉了也是错误的呢。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧