首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

2012 ACM/ICPC Asia Regional Online Warmu 一部分代码和数据

2012-09-05 
2012 ACM/ICPC Asia Regional Online Warmu 部分代码和数据总结见:http://blog.csdn.net/woshi250hua/arti

2012 ACM/ICPC Asia Regional Online Warmu 部分代码和数据

总结见:http://blog.csdn.net/woshi250hua/article/details/7908090


1002代码:

#include <stdio.h>#include <string.h>#define MIN 1100#define MAX 1000000struct node {    int v,kind;    node *next;}tree[MAX*2],*head[MIN];int ptr,n,m,k,flag;int fa[MIN],rank[MIN];void Initial() {    ptr = flag = 0;    memset(head,NULL,sizeof(head));    for (int i = 1; i <= n; ++i)        fa[i] = i,rank[i] = 1;}void AddEdge(int x,int y,int kind) {    tree[ptr].v = y,tree[ptr].kind = kind;    tree[ptr].next = head[x],head[x] = &tree[ptr++];}int Getfa(int x) {    int r = x,q;    while (r != fa[r]) r = fa[r];    while (r != x) {        q = fa[x];        fa[x] = r;        x = q;    }    return r;}int Solve() {    int i,j;    int mmax = 0,mmin = 0;    node *p;    for (i = 1; i <= n; ++i) {        p = head[i];        while (p != NULL) {            if (p->kind) {                int u = i,v = p->v;                int ta = Getfa(u),tb = Getfa(v);                if (ta != tb)                    fa[ta] = tb,mmax++;            }            p = p->next;        }    }    for (i = 1; i <= n; ++i)        fa[i] = i,rank[i] = 1;    for (i = 1; i <= n; ++i) {        p = head[i];        while (p != NULL) {            if (p->kind == 0) {                int u = i,v = p->v;                int ta = Getfa(u),tb = Getfa(v);                if (ta != tb)                    fa[ta] = tb,mmin++;            }            p = p->next;        }    }        mmin = n - 1 - mmin;    //printf("%d %d\n",mmin,mmax);    if (mmin <= k && mmax >= k) return 1;    else return 0;}int main(){    int i,j;    while (scanf("%d%d%d",&n,&m,&k),n+m+k) {        Initial();        for (i = 1; i <= m; ++i) {            int b,c;            char s[2];            scanf("%s %d%d",s,&b,&c);            AddEdge(b,c,s[0]=='B');            AddEdge(c,b,s[0]=='B');        }        int flag = Solve();        printf("%d\n",flag);    }}

未完,待续...

热点排行