题目链接:https://cn.vjudge.net/contest/68128#problem/C

没理解好题意真的麻烦,一上午就这么过去了。。。。。

具体思路:按照 源点 ->插座->转换器->插头->汇点的方式建图,源点到插座的流量为1,插头到汇点的流量为1,转换器之间如果能相连则赋值为inf.(转换器相连的条件,对于某一个转换器 他可以连下一个的头或者尾,但是这个转换器的方向不能变!!!坑点)

AC代码:

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<set>
#include<queue>
#include<stdio.h>
#include<stack>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
# define inf 0x3f3f3f3f
# define maxn 500+10
# define ll long long
int n,m,k;
int dis[maxn][maxn];
char chazuo[maxn][maxn];
char change[maxn][maxn];
char chahead[maxn][maxn];
int vis[maxn],pre[maxn];
struct node
{
char fr[maxn];
char to[maxn];
} a[maxn]; bool bfs(int st,int ed)
{
queue<int>q;
memset(vis,0,sizeof(vis));
vis[st]=1;
pre[st]=st;
q.push(st);
while(!q.empty())
{
int top=q.front();
q.pop();
for(int i=1; i<=n+m+k+2; i++)
{
if(vis[i]==0&&dis[top][i]>0)
{
pre[i]=top;
vis[i]=1;
if(i==ed)return true;
q.push(i);
}
}
}
return false;
}
int EK(int st,int ed)
{
int ans=0;
while(bfs(st,ed))
{
int minn=inf;
for(int i=ed; i!=st; i=pre[i])
{
minn=min(minn,dis[pre[i]][i]);
}
for(int i=ed; i!=st; i=pre[i])
{
dis[pre[i]][i]-=minn;
dis[i][pre[i]]+=minn;
}
ans+=minn;
}
return ans;
}
int main()
{
while(~scanf("%d",&n))
{
memset(dis,0,sizeof(dis));
for(int i=1; i<=n; i++)
{
scanf("%s",chazuo[i]);
}
scanf("%d",&m);
for(int i=1; i<=m; i++)
{
scanf("%*s %s",chahead[i]);
}
scanf("%d",&k);
for(int i=1; i<=k; i++)
{
scanf("%s %s",a[i].fr,a[i].to);
}
for(int i=1; i<=n; i++) //zuo -> chahead
{
for(int j=1; j<=m; j++)
{
if(strcmp(chazuo[i],chahead[j])==0)
{
dis[i][n+k+j]=1;
}
}
}
for(int i=1; i<=n; i++) //zuo -> change
{
for(int j=1; j<=k; j++)
{
if(strcmp(chazuo[i],a[j].fr)==0||strcmp(chazuo[i],a[j].to)==0)
{
dis[i][n+j]=1;
}
}
}
for(int i=1; i<=k; i++) //change-> head
{
for(int j=1; j<=m; j++)
{
if(strcmp(a[i].to,chahead[j])==0||strcmp(a[i].fr,chahead[j])==0)
{
dis[n+i][n+k+j]=1;
}
}
}
for(int i=1; i<=k; i++) // change -> change
{
for(int j=1; j<=k; j++)
{
if(strcmp(a[i].fr,a[j].to)==0)
{
dis[i+n][j+n]=inf;
}
}
}
int st=n+m+k+1;
int ed=st+1;
for(int i=1; i<=n; i++)
{
dis[st][i]=1;
}
for(int i=1; i<=m; i++)
{
dis[n+k+i][ed]=1;
}
int ans=EK(st,ed);
printf("%d\n",m-ans);
}
return 0;
}

C - A Plug for UNIX (又是建图坑)的更多相关文章

  1. poj 1087 A Plug for UNIX(字符串编号建图)

    A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14862   Accepted: 5026 ...

  2. POJ A Plug for UNIX (最大流 建图)

    Description You are in charge of setting up the press room for the inaugural meeting of the United N ...

  3. A Plug for UNIX 分类: POJ 图论 函数 2015-08-10 14:18 2人阅读 评论(0) 收藏

    A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14786 Accepted: 4994 Desc ...

  4. POJ1087 A Plug for UNIX(网络流)

                                       A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  5. 【poj1087/uva753】A Plug for UNIX(最大流)

    A Plug for UNIX   Description You are in charge of setting up the press room for the inaugural meeti ...

  6. TZOJ 1911 A Plug for UNIX(最大流)

    描述 You are in charge of setting up the press room for the inaugural meeting of the United Nations In ...

  7. POJ1087 A Plug for UNIX 2017-02-12 13:38 40人阅读 评论(0) 收藏

    A Plug for UNIX Description You are in charge of setting up the press room for the inaugural meeting ...

  8. POJ1087:A Plug for UNIX(最大流)

    A Plug for UNIX 题目链接:https://vjudge.net/problem/POJ-1087 Description: You are in charge of setting u ...

  9. POJ1087 A Plug for UNIX —— 最大流

    题目链接:https://vjudge.net/problem/POJ-1087 A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K T ...

随机推荐

  1. 小程序 openid 的原始请求和网络请求

    // 登录 wx.login({ success: res => { var code = res.code; //返回code // console.log(code) // 小程序appid ...

  2. java与C++相比增加和缺少的特性--持续更新

    缺少的特性 java值类型中没有无符号数 java没有运算符重载语法 java中没有struct和union等用户自定义值类型 java中没有虚函数的概念,所有函数默认具有虚函数的特性 java采用单 ...

  3. java 创建过程

  4. nginx通过配置empty_gif解决请求favicon 404的问题

    背景介绍 因为一些浏览器在访问网站时会默认去请求网站的favicon,但是我的网站(Tengine)上并没有这些icon图片,因此在访问日志里会出现大量的404错误,会触发一些没必要日志告警.我们可以 ...

  5. 5W2H方法

    5W2H分析方法也叫七问分析法,是二战中美国陆军兵器修理部首创.简单.方便.易于理解.使用,富有启发意义,被广泛应用于企业管理和技术活动,对于决策和执行性的措施也非常有帮助,有助于弥补考虑问题的疏漏 ...

  6. 每日一问(常用的集合接口和类有哪些【二】)—最常用的集合ArrayList类

    本人在曾经的数年编程生涯中,使用的最多的就是ArrayList类了,原因也非常简单.ArrayList类可以是最直接符合集合这一概念的类了,当然这种说法只是我的个人之见.ArrayList可以说是一个 ...

  7. BZOJ1226 SDOI2009学校食堂(状压dp)

    由于Bi<=7,考虑状压. 如果考虑前i个位置的话,状态里需要压入前7个人后7个人,显然是跑不动的. 那么改成考虑前i个人.于是设f[i][j][k]表示前i个人都已吃完饭,i+1后面7个人的吃 ...

  8. 解决 'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件 提示问题

    如果出现提示“出现'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件” 这是PATH环境变量的问题,将windows命令的目录添加到PATH中就over了.即:在path中追加:% ...

  9. 【刷题】HDU 1853 Cyclic Tour

    Problem Description There are N cities in our country, and M one-way roads connecting them. Now Litt ...

  10. BZOJ 3787: Gty的文艺妹子序列

    3787: Gty的文艺妹子序列 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 186  Solved: 58[Submit][Status][Dis ...