码迷,mamicode.com
首页 > 其他好文 > 详细

p1232

时间:2018-09-22 16:01:18      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:com   sdi   图片   struct   支持   tin   这不   mem   pac   

技术分享图片

技术分享图片

刚开始真的没想到什么好算法,然后就看到了数据规模,小于5000...这不是在逗我么.

那么就可以支持n^2的算法了,对于每个点跑一次dfs,每个到达的点记录flag[i][now]=1,最后找最大值并输出.

明明是n^2为啥有快超时的啊?不懂

技术分享图片

 

using namespace std;
int i,f,tx,ty,t;
int n,m;
int head[5010],tot,flag[5010][5010],v[5010],sum[5010];
inline void write(int x)  
{  
    if(x<0) putchar(-),x=-x;  
    if(x>9) write(x/10);  
    putchar(x%10+0);  
}
inline int read()
{
    int x=0,n=1;
    char ch=getchar();
    while(!isdigit(ch))
    {
     if(ch==-)n=-1;
     ch=getchar();
 }
    while(isdigit(ch))
    {
        x=(x<<1)+(x<<3)+ch-0;
        ch=getchar();
    }
    return x*n;
}
struct edge
{
    int x,y,next;
}o[100010];
void add(int x,int y)
{
    tot++;
    o[tot].x=x;
    o[tot].y=y;
    o[tot].next=head[x];
    head[x]=tot;
}
void dfs(int now)
{
    v[now]=1;
    flag[i][now]=1;
    for(int j=head[now];j;j=o[j].next){
        if(v[o[j].y])continue;
        dfs(o[j].y);
    }
}
int main()
{
//freopen("123.in","r",stdin);
//freopen("123.out","w",stdout);
    n=read();m=read();
    for(i=1;i<=m;++i){
        tx=read();
        ty=read();
        t=read();
        add(tx,ty);
        if(t==2)
            add(ty,tx);
    }
    for(i=1;i<=n;++i){
        memset(v,0,sizeof(v));
        dfs(i);
    }
    for(i=1;i<=n;++i)
        for(f=i+1;f<=n;++f)
            if(flag[i][f]&&flag[f][i])
                sum[i]++,sum[f]++;
    for(i=n;i>=1;--i)
        if(sum[i]>sum[0])
            sum[0]=sum[i],t=i;
    write(sum[0]+1);
    putchar(10);
    for(i=1;i<=n;++i)
        if(flag[i][t]&&flag[t][i])
            write(i),putchar(32);
    return 0;
}

 

p1232

标签:com   sdi   图片   struct   支持   tin   这不   mem   pac   

原文地址:https://www.cnblogs.com/qywyt/p/9690153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!