栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1695 True Liars

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1695 True Liars

#include<iostream>#include<cstdio>#include<map>#include<cstring>#include<cmath>#include<vector>#include<algorithm>#include<set>#include<string>#include<queue>#define inf 1<<30#define M 60005#define N 605#define maxn 300005#define eps 1e-10#define zero(a) fabs(a)<eps#define Min(a,b) ((a)<(b)?(a):(b))#define Max(a,b) ((a)>(b)?(a):(b))#define pb(a) push_back(a)#define mem(a,b) memset(a,b,sizeof(a))#define LL long long#define lson step<<1#define rson step<<1|1#define MOD 1000000009#define sqr(a) ((a)*(a))using namespace std;int pre[N],r[N];int p1,p2,p;bool vis[N];int dp[N][N/2];int cnt;  int a[N][2];  vector<int> b[N][2];int find(int x){    if(x!=pre[x])    {        int f=pre[x];        pre[x]=find(pre[x]);        r[x]=r[x]^r[f];    }    return pre[x];}void Init(){    for(int i=1; i<=p1+p2; i++) pre[i]=i,r[i]=0;    mem(vis,false);    cnt=1;    mem(a,0);    for(int i=0; i<N; i++)    {        b[i][0].clear();        b[i][1].clear();    }}int main(){    while(scanf("%d%d%d",&p,&p1,&p2)!=EOF&&p+p1+p2)    {        Init();        while(p--)        { int u,v; char str[10]; scanf("%d%d%s",&u,&v,str); int k=(str[0]=='n'); int ra=find(u),rb=find(v); if(ra!=rb) {     pre[ra]=rb;     r[ra]=r[u]^r[v]^k; }        }        for(int i=1; i<=p1+p2; i++)        { if(!vis[i]) {     int f=find(i);     for(int j=i; j<=p1+p2; j++)     {         if(find(j)==f)         {  vis[j]=true;  b[cnt][r[j]].pb(j);  a[cnt][r[j]]++;         }     }     cnt++; }        }        mem(dp,0);        dp[0][0]=1;        for(int i=1; i<cnt; i++)        { for(int j=p1; j>=0; j--) {     if(j-a[i][0]>=0)         dp[i][j]+=dp[i-1][j-a[i][0]];     if(j-a[i][1]>=0)         dp[i][j]+=dp[i-1][j-a[i][1]]; }        }        if(dp[cnt-1][p1]!=1)        { printf("non"); continue;        }        else        { vector<int>ans; ans.clear(); for(int i=cnt-1; i>=1; i--) {     if(p1-a[i][0]>=0&&p2-a[i][1]>=0&&dp[i-1][p1-a[i][0]]==1)     {         for(int j=0; j<b[i][0].size(); j++)         {  ans.pb(b[i][0][j]);         }         p1-=a[i][0];         p2-=a[i][1];     }     else if(p1-a[i][1]>=0&&p2-a[i][0]>=0&&dp[i-1][p1-a[i][1]]==1)     {         for(int j=0; j<b[i][1].size(); j++)         {  ans.pb(b[i][1][j]);         }         p1-=a[i][1];         p2-=a[i][0];     } } sort(ans.begin(),ans.end()); for(int i=0; i<ans.size(); i++) printf("%dn",ans[i]); printf("endn");        }    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372807.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号