zoukankan      html  css  js  c++  java
  • zoj 1967 Fiber Network

    题目大意是一张地图中n个公司建立一些点间的线路,对每次查询A,B,输出A,B间可通过哪些公司的线路连接。

    floyd变形,m[ i ][ j ]表示 i 到 j 间可以通过的公司的线路,对于公司的表示利用位运算,每个小写字母代表一个公司,所以不超过26位,如000.....00101代表公司a和c,0000....111代表公司a,b,c,则方程为m[ i ][ j ]|=m[ i ][ k ]&m[ k ][ j ]。

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    	int m[300][300],n,A,B;
    	int i,j,k;
    	char str[30],ch;   
    	while(1)
    	{
    		memset(m,0,sizeof(m));
    		scanf("%d",&n);
    		if(n==0)
    			break;
    		while(1)
    		{
    			scanf("%d%d",&A,&B);
    			if(A==0&&B==0)
    				break;
    			getchar();
    			scanf("%s",str);
    			for(i=0;str[i];i++)
    				m[A][B]|=1<<(str[i]-'a');  //位运算表示公司集合
    		}
    		for(k=1;k<=n;k++)
    			for(i=1;i<=n;i++)
    				for(j=1;j<=n;j++)
    					m[i][j]|=(m[i][k]&m[k][j]);
    		while(1)
    		{
    			scanf("%d%d",&A,&B);
    			if(A==0&&B==0)
    				break;
    			for(ch='a';ch<='z';ch++)
    			{
    				if(m[A][B]&(1<<(ch-'a')))
    					printf("%c",ch);
    			}
    			if(!m[A][B])
    				printf("-");
    			printf("
    ");
    		}
    		printf("
    ");
    	}
    	return 0;
    }
    


     

  • 相关阅读:
    不弹出提示直接关闭页面
    orcale表解锁
    序列化和反序列化
    js 实现post传参
    简易实现 instanceOf
    简易实现virtualdom
    react中setState同步、异步问题
    CMake Qt 配置 OpenCV
    VS执行时打开cmd
    VS2019+Qt5.15.2环境配置
  • 原文地址:https://www.cnblogs.com/vermouth/p/3710223.html
Copyright © 2011-2022 走看看