• [COCI2017-2018#6] Alkemija


    题意

    一共有 (n) 种物质,已知开始你有 (m) 种物质且数量足够多,再给出 (K) 个物质的转化规则(一堆物质变成另一堆),问一共能够得到多少种物质。

    分析

    • (n) 种物质和 (K) 种转移分别建点,转化成图论问题。

    • 一种物质显然只要有一个转移满足了就可以得到,而一种转移可以完成当且仅当所有需求物质已经得到。

    • 直接 (bfs) 转移即可,转移的判定类似拓扑排序。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].lst,v=e[i].to)
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define pb push_back
    typedef long long LL;
    inline int gi(){
    	int x=0,f=1;char ch=getchar();
    	while(!isdigit(ch))	{if(ch=='-') f=-1;ch=getchar();}
    	while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
    	return x*f;
    }
    template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
    template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
    const int N=2e5 + 7;
    int edc,S,ndc,n,m;
    int head[N],ind[N];
    bool vis[N];
    struct edge{
    	int lst,to;
    	edge(){}edge(int lst,int to):lst(lst),to(to){}
    }e[N*10];
    void Add(int a,int b){
    	e[++edc]=edge(head[a],b),head[a]=edc;	
    }
    queue<int>Q;
    void bfs(){
    	Q.push(S);vis[S]=1;
    	while(!Q.empty()){
    		int u=Q.front();Q.pop();
    		go(u)if(!vis[v]){
    			if(v>n){
    				if(--ind[v]==0) vis[v]=1,Q.push(v);
    			}else{
    				vis[v]=1,Q.push(v);
    			}
    		}
    	}
    }
    int main(){
    	n=gi(),m=gi();S=n+1,ndc=S+1;
    	rep(i,1,m) Add(S,gi());
    	int Q=gi();
    	while(Q--){
    		int L=gi(),R=gi();++ndc;
    		rep(i,1,L) Add(gi(),ndc),++ind[ndc];
    		rep(i,1,R) Add(ndc,gi());
    	}
    	bfs();
    	int ans=0;
    	rep(i,1,n) if(vis[i]) ++ans;
    	printf("%d
    ",ans);
    	for(int i=1,fi=1;i<=n;++i)if(vis[i]){
    		if(fi) fi=0,printf("%d",i);
    		else printf(" %d",i);
    	}
    	puts("");
    	return 0;
    }
    
  • 相关阅读:
    安全系列之二:OAuth2.0 开放授权协议
    安全系列之一:忘记密码
    Tomcat剖析(五):Tomcat 容器
    如何做好项目?
    SonarLint(Sonar) 代码质量管理
    一个JavaWeb项目开发总结
    Tomcat剖析(四):Tomcat默认连接器(2)
    Tomcat剖析(四):Tomcat默认连接器(1)
    Spring mvc 字节流
    spring mvc 之初体验
  • 原文地址:https://www.cnblogs.com/yqgAKIOI/p/9898383.html
Copyright © 2020-2023  润新知