Codeforces - 1176E - Cover it! - bfs

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces - 1176E - Cover it! - bfs相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/dfs' title='dfs'>dfs   space   --   return   while   include   uri   head   eve   

https://codeforc.es/contest/1176/problem/E

涔呬簡涓嶅啓bfs浜嗐€備竴寮€濮嬬敤dfs鍐欙紝鐨勭‘鐢╠fs鏄緢鏈夐棶棰樼殑锛屼竴浜涘鎬殑鎯呭喌灏变細瀵艰嚧澶氭煋涓€浜涜壊銆?/p>

娉ㄦ剰鏃犲悜鍥剧殑杈硅寮€鍙屽€嶃€?/p>

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int n, m;

struct Edge 
    int u, v;
    int next;
    Edge() 
    Edge(int u, int v, int next): u(u), v(v), next(next) 
;

struct Graph 
    Edge edge[400005];
    int head[200005], etop;

    void init(int n) 
        etop = 0;
        memset(head + 1, -1, sizeof(head[1])*n);
    

    void add_edge(int u, int v) 
        edge[++etop] = Edge(u, v, head[u]);
        head[u] = etop;
        edge[++etop] = Edge(v, u, head[v]);
        head[v] = etop;
    
 g;

bool visited[200005];
bool color[200005];
int dis[200005];

int que[200005];
int qhead, qtail;

int cntodd, cnteven;

void enqueue(int id, int d) 
    if(visited[id])
        return;
    visited[id] = true;
    dis[id] = d;
    if(d & 1)
        cntodd++;
    else
        cnteven++;
    que[++qtail] = id;


void bfs() 
    memset(visited + 1, false, sizeof(visited[1])*n);
    qhead = 1, qtail = 0;
    cntodd = 0, cnteven = 0;
    enqueue(1, 0);
    while(qhead <= qtail) 
        int u = que[qhead++];
        for(int i = g.head[u]; i != -1; i = g.edge[i].next) 
            enqueue(g.edge[i].v,dis[u]+1);
        
    


int main() 
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
    //freopen("Yinku.out", "w", stdout);
#endif // Yinku
    int t;
    while(~scanf("%d", &t)) 
        while(t--) 
            scanf("%d%d", &n, &m);
            g.init(n);
            for(int i = 1; i <= m; i++) 
                int u, v;
                scanf("%d%d", &u, &v);
                g.add_edge(u, v);
            
            bfs();
            int ch = 0;
            if(cntodd <= cnteven)
                ch = 1;

            int cnt = 0, last = -1;
            for(int i = 1; i <= n; i++) 
                if((dis[i] & 1) == ch) 
                    cnt++;
                    last = i;
                
            

            printf("%d\n", cnt);
            for(int i = 1; i <= n; i++) 
                if((dis[i] & 1) == ch) 
                    printf("%d", i);
                    if(i == last) 
                        printf("\n");
                        break;
                     else 
                        printf(" ");
                    
                
            
        
    

以上是关于Codeforces - 1176E - Cover it! - bfs的主要内容,如果未能解决你的问题,请参考以下文章

推送到 Heroku 被拒绝,破坏 package.json

幽灵按钮的实现

珊瑚欣赏美国 Reef Raft 精品珊瑚美图欣赏

iPhone 模态视图动画帮助

如果条件标签不能正常工作

element中el-upload