zoukankan      html  css  js  c++  java
  • 【ybtoj】【Hash】最大分离度

    题意

    image

    题解

    很水的题啊。
    不难想到对于每一个人当作点连边,如果一个人第一次出现就新建一个点。
    然后求出每两个点之间的最短路,取最大值,特判是否不连通。
    判断一个人是否出现过可以用 Hash,但是感觉 Hash 之后还要开 map 记录数值,干脆直接开map<string,int>.
    所以为什么有这篇题解?因为我求最短路的第一想法居然是对每一个点跑一遍 BFS。虽然复杂度上没错但是略复杂。
    实际上,直接跑 Floyd 即可,这篇题解纯是为了提醒自己 Floyd 这玩意的。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int INF = 0x3f3f3f3f,N = 55;
    inline ll read()
    {
    	ll ret=0;char ch=' ',c=getchar();
    	while(!(c>='0'&&c<='9')) ch=c,c=getchar();
    	while(c>='0'&&c<='9') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();
    	return ch=='-'?-ret:ret;
    }
    int p,r;
    int f[N][N],cnt;
    char s1[55],s2[55];
    map<string,int> mp;
    inline void init()
    {
    	mp.clear();
    	cnt=0;
    	memset(f,0x3f,sizeof(f)); 
    }
    int T;
    int main()
    {
    	p=read(),r=read();
    	while(p||r)
    	{
    		T++;
    		init();
    		for(int i=1;i<=r;i++) 
    		{
    			scanf("%s%s",s1+1,s2+1);
    			if(!mp[s1+1]) mp[s1+1]=++cnt;
    			if(!mp[s2+1]) mp[s2+1]=++cnt;
    			f[mp[s2+1]][mp[s1+1]]=f[mp[s1+1]][mp[s2+1]]=1;
    		}
    		for(int k=1;k<=p;k++) 
    			for(int i=1;i<=p;i++) 
    				for(int j=1;j<=p;j++)
    					f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
    		int ans=0;
    		for(int i=1;i<=p;i++)
    		 	for(int j=1;j<=p;j++)
    		 		if(i!=j) ans=max(ans,f[i][j]);
    		if(ans==INF) printf("Network %d: DISCONNECTED
    ",T);
    		else  printf("Network %d: %d
    ",T,ans);
    		p=read(),r=read();
    	}
    	return 0;
    }
    
  • 相关阅读:
    Leetcode: Total Hamming Distance
    Leetcode: Hamming Distance
    Leetcode: Valid Word Square
    Leetcode: Sentence Screen Fitting
    Leetcode: Minimum Unique Word Abbreviation
    Leetcode: Design Phone Directory
    Leetcode: Valid Word Abbreviation
    Leetcode: Range Addition
    Leetcode: Find Leaves of Binary Tree
    Leetcode: Design Hit Counter
  • 原文地址:https://www.cnblogs.com/conprour/p/15303564.html
Copyright © 2011-2022 走看看