CCF通信网络(水题)

第一反应是用Flody把初始距离为inf,然后右边可达为1

到最后判断每个顶点与其他顶点是不是都可达,如果可达number++;

但是超时了60分 = =

后来发现直接裸个dfs把图遍历一下就直接过了  真尴尬= =

可恶!

60:

#include
#include
using namespace std;
const int inf=999999999;
int arc1[1002][1002];
int arc2[1002][1002];
int main()
{
    int n,e;
    cin>>n>>e;
    int i,j,k;
    int x,y;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
    {
        arc1[i][j]=inf;
        arc2[i][j]=inf;
    }
    for(i=0;i>x>>y;
        arc1[x][y]=1;
        arc2[y][x]=1;
    }
    for(k=1;k<=n;k++)
        for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    if(i==j) continue;
                    if(arc1[i][k]+arc1[k][j]

100:

#include
#include
using namespace std;
int number=0;
int visit1[1002];
int visit2[1002];
vector a1[1002];
vector a2[1002];
void dfs1(int i)
{
    visit1[i]=1;
    int j;
    for(j=0; j>n>>e;
    for(i=0; i>x>>y;
        a1[x].push_back(y);
        a2[y].push_back(x);
    }
    for(i=1; i<=n; i++)
    {
        int flag=1;
        int j;
        for(j=1; j<=n; j++)
        {
            visit1[j]=0;
            visit2[j]=0;
        }
        dfs1(i);
        dfs2(i);
        for(j=1; j<=n; j++)
            if(visit1[j]==0&&visit2[j]==0)
            {
                flag=0;
                break;
            }
        if(flag==1) number++;
    }
    cout<

0.0

你可能感兴趣的:(CCF)