poj 3687 拓扑排序 反向建图

来源:互联网 发布:汉德尔电力监控软件 编辑:程序博客网 时间:2024/06/06 03:55

题意:给你一些条件,规划重量,满足条件,编号靠前的尽量重量小。

反向建图。

比如:3 1

            3 1  

正向拓扑的话,输出可能  2 3 1 也就是3 1 2(题目输出的不是排序,而是重量的方案),答案应该是3 1 2也就是 2 3 1,当然Discuss里有说正向+权重的话可以AC


题目类似与Bestcoder #1的第一题(CLJ),当时是hack大赛吧~

#define maxn 300+5int n,m;struct node{    int to,w;    int next;}edge[40050];int head[maxn];int in[maxn],out[maxn];int used[maxn];int cnt;int dis[maxn];int biao;int flag;vector<int>V;void init(){    int i,j,k;    memset(head,-1,sizeof(head));    cle(in);    memset(dis,0x7f,sizeof(dis));    biao=dis[0];    cnt=1;}void add(int x,int y){    edge[cnt].to=y;    //edge[cnt].w=val;    edge[cnt].next=head[x];    head[x]=cnt++;    in[y]++;    out[x]++;}void getans(){    cle(used);    priority_queue<int> ans;   for(int i=1;i<=n;i++)   {       if(in[i]==0)       {           ans.push(i);       }   }   while(!ans.empty())   {       int temp=ans.top();       used[temp]=1;       V.push_back(temp);       ans.pop();       for(int j=head[temp];j!=-1;j=edge[j].next)       {           int v=edge[j].to;           in[v]--;           if(in[v]==0)           {               ans.push(v);           }       }   }}int main(){   // freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    int T;    cin>>T;    while(T--)    {        V.clear();        cin>>n>>m;        init();        int i,j,k;        for(i=1;i<=m;i++)        {            int x,y;            scanf("%d%d",&x,&y);            add(y,x);        }            cle(used);            getans();            int num[maxn];            if(V.size()<n)cout<<-1<<endl;            else{               int len=V.size();                for(i=V.size()-1;i>=0;i--)                {                    num[V[i]]=len-i;                }             /*   for(i=V.size()-1;i>=0;i--)                {                    cout<<V[i]<<" ";                }                cout<<endl;*/                for(i=1;i<=n;i++)                {                    cout<<num[i]<<" ";                }                cout<<endl;            }    }    return 0;}


0 0
原创粉丝点击