All pastes #460592 Raw Edit

Stuff

public cpp v1 · immutable
#460592 ·published 2007-04-27 04:07 UTC
rendered paste body
#include<iostream>#include<vector>#include<algorithm>#include<queue>using namespace std;#define BLACK 100#define WHITE 200#define FOR(i,n) for(int i=0;i<n;i++)int **A;int n;class Graph{    public:        void assign(int **a);        Graph() { count=0; }        int Dfs(int st);        int DfsVisit(int u,int color);        void printBest();        void setBest();    private:        int A[101][101];        int N,count;        int colour[101];        bool isColoured[101];        int best[101];}g;    void Graph::setBest(){    FOR(i,n) best[i]=colour[i];}void Graph::assign(int **a){    N=n;    count=0;    FOR(i,n){        colour[i]=0;        isColoured[i]=-1;        FOR(j,n) A[i][j]=a[i][j];    }}void Graph::printBest(){    vector<int> best1;    FOR(i,N) if(best[i]==BLACK) best1.push_back(i+1);    int len=best1.size();    FOR(i,len) {        cout<<best1[i];        if(i==len-1) cout<<"\n";        else cout<<" ";    }    }    int Graph::Dfs(int st){    colour[st]=BLACK;    DfsVisit(st,BLACK);    count++;    FOR(i,N){        if(!colour[i]){            bool flag=true;            FOR(j,N){                if(A[i][j]&&colour[j]==BLACK){                     flag=false;                    break;                }            }            if(flag){                colour[i]=BLACK;                count++;            }                else colour[i]=WHITE;            DfsVisit(i,colour[i]);        }    }    return count;}int Graph::DfsVisit(int u,int color){    FOR(i,N){        if(A[u][i]&&!colour[i]){            bool flag=true;            if(color==WHITE)            FOR(j,N){                if(A[i][j]&&colour[j]==BLACK){                     flag=false;                    break;                }            }            if(color==WHITE&&flag){                colour[i]=BLACK;                count++;            }                else colour[i]=WHITE;            DfsVisit(i,colour[i]);        }    }    return 0;}  int main(){    int k,x,y;    int test;    cin>>test;    A=new int*[101];    FOR(i,101) A[i]=new int[101];    while(test--){        cin>>n>>k;        FOR(i,n) FOR(j,n) A[i][j]=0;        FOR(i,k) {            cin>>x>>y;            A[x-1][y-1]=1;            A[y-1][x-1]=1;        }        int mc=-1,c=0;        FOR(i,n) {            g.assign(A);            c=g.Dfs(i);            if(mc<c){                mc=c;                g.setBest();            }            }        cout<<mc<<endl;        g.printBest();    }        return 0;}