码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj-吝啬的国度

时间:2015-04-06 10:05:36      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

第一次刷图论,对存储什么的还不熟悉,这题用邻接矩阵太大,邻接表不知道怎么弄,还好vector来存可以节省很多空间。

n-1条边可以认为它是一个连通无环图,一棵树

然后深搜,用一个p数组存数每一步的父结点,visit存储该结点是否访问。

不过最后我vector没有清空,wrong answer了。

#include <iostream>
#include <cstring>
#include <vector>

using namespace std;

const int Max = 100001;
int p[Max];
int visit[Max];
vector<int> a[Max];

void dfs(int s)
{
     //cout << s<< ‘[‘;
     visit[s] = 1;
    for(int i = 0 ; i < a[s].size(); i++)
      if(a[s][i]&&!visit[a[s][i]])
      {//cout << ‘!‘;
                            
                  p[a[s][i]] = s;          
                  dfs(a[s][i]);
      }
         
}
int main()
{
    int num,n,s;
    int x,y;

    cin >> num ;
    while(num--)
    {
            memset(p,-1,sizeof(p));
            memset(visit,0,sizeof(visit));
           cin >> n >> s;
           for(int i = 0; i < n-1; i++)
            {
                   cin >> x >> y;
                   a[x].push_back(y);
                   a[y].push_back(x);
                   
            }   
    dfs(s);
for(int  i = 1; i <= n; i++)
        {cout  <<p[i] <<   ;a[i].clear();}
        cout << endl;
    
        
        }
        system("pause");
    return 0;
}

 

nyoj-吝啬的国度

标签:

原文地址:http://www.cnblogs.com/ekinzhang/p/4395510.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!