【UVALive 7334】Kernel Knights

题意

  有两个队的骑士1到n和n+1到2n,每个骑士只能互相攻击对手队的一个骑士。kernel的意思是在这个kernel里的骑士不会互相攻击,在kernel外的骑士被kernel里的骑士攻击。

现在告诉你所有骑士攻击的骑士,求一个kernel。

分析

没人攻击的骑士一定在kernel里,把没人攻击的加入队列,然后被他攻击的骑士一定在kernel外。

kernel外的骑士的攻击无效,因为如果一个骑士如果只被外面的骑士攻击,他就是kernel里的。

于是 被 外面的骑士攻击 的骑士 的被攻击次数 -1,如果被攻击次数为0了就加入队列。

某个导致我WA的地方:被攻击次数 -1 这个操作不能重复,所以要判断当前这个“外面的骑士”是不是已经处理过。

反例:

4

5 5 8 7

3 3 4 4

正确答案:1 2 6 7 8

重复操作的错误答案:1 2 3 6 7 8

处理完后,剩下的就是一个边数为偶数的环,只要输出它的一边就好了。

这题也可以DFS。

代码

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=2e5+100;
int n,a[maxn],d[maxn],k[maxn];
queue<int> q;

int main()
{
    while(~scanf("%d",&n))
    {
        while(!q.empty()) q.pop();
        memset(d,0,sizeof(d));
        memset(k,0,sizeof(k));
        for(int i=1; i<=2*n; i++)
        {
            scanf("%d",&a[i]);
            d[a[i]]++;
        }
        for(int i=1; i<=2*n; i++)
        {
            if(d[i]==0)q.push(i);
        }
        while(!q.empty())
        {
            int p=q.front();
            q.pop();
            k[p]=1;
            if( k[ a[p] ]==-1  )continue;//没有它而让我WA的地方
            k[a[p]]=-1;
            d[a[a[p]]]--;
            if(d[a[a[p]]]==0)q.push(a[a[p]]);
        }
        for(int i=1; i<=2*n; i++)
        {
            if(i<=n&&k[i]>=0)printf("%d ",i);
            else if(k[i]==1)printf("%d ",i);
        }
        printf("\n");
    }
    return 0;
}

  

时间: 2024-11-10 07:39:14

【UVALive 7334】Kernel Knights的相关文章

【Uvalive 2531】 The K-League (最大流-类似公平分配问题)

[题意] 有n个队伍进行比赛,每场比赛,恰好有一支队伍取胜.一支队伍败.每个队伍需要打的比赛场数相同,给你每个队伍目前已经赢得场数和输得场数,再给你一个矩阵,第 i 行第 j 列 表示队伍 i 和队伍 j 还需要打的比赛数,问你哪些队伍有可能获得冠军(胜场最多的即为冠军,可以并列). InputThe input consists of T test cases. The number of test cases (T) is given in the first line of the inp

【 UVALive - 2197】Paint the Roads(上下界费用流)

Description In a country there are n cities connected by m one way roads. You can paint any of these roads. To paint a road it costs d unit of money where d is the length of that road. Your task is to paint some of the roads so that the painted roads

【UVALive - 5131】Chips Challenge(上下界循环费用流)

Description A prominent microprocessor company has enlisted your help to lay out some interchangeable components(widgets) on some of their computer chips. Each chip’s design is an N × N square of slots. Oneslot can hold a single component, and you ar

【 UVALive - 5095】Transportation(费用流)

Description There are N cities, and M directed roads connecting them. Now you want to transport K units ofgoods from city 1 to city N. There are many robbers on the road, so you must be very careful. Themore goods you carry, the more dangerous it is.

【UVALive - 3487】 Duopoly(网络流-最小割)

Description The mobile network market in country XYZ used to be dominated by two large corporations, XYZTelecom and XYZ Mobile. The central government recently has realized that radio frequency spectrumis a scarce resource and wants to regulate its u

【UVALive 4642】Malfatti Circles(圆,二分)

题 给定三角形,求三个两两相切且与三角形的一条边相切的圆的半径. 二分一个半径,可以得出另外两个半径,需要推一推公式(太久了,我忘记了) #include<cstdio> #include<cmath> #define eps (1e-8) #define sqr(a) (a)*(a) #define min(a,b) (a)>(b)?(b):(a) #define dd double struct point{ dd x,y,v,a;//点x,y,v为角度,a为边长 }q[

UVALive 5881 Unique Encryption Keys【线段树】

题目:UVALive 5881 Unique Encryption Keys 分类:线段树,想法题 题意:给出n个数,然后有q次查询,每次查询 l---r 区间内有没有重复的数,有的话输出任意的,没有的话输出ok 分析:上去一看觉得这个题目可以不用线段树做,因为它是静态的,想了一个方法后来发现时不对的,后来规规矩矩用线段树了. 这个题目不能直接用线段树,否则的话无法维护他们的值,区间内出现超过两次的值没有办法维护,你可以维护出来线段树中出现过的区间,但是当询问的是两个区间的时候又没有办法处理了,

【POJ 2942】Knights of the Round Table(双联通分量+染色判奇环)

[POJ 2942]Knights of the Round Table(双联通分量+染色判奇环) Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 11661   Accepted: 3824 Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, an

UVAlive - 3938 —— &quot;Ray, Pass me the dishes!&quot; 【线段树】

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22105 #include <iostream> #include <cstdio> #include <cstring> #include <string> #define INF 0x3f3f3f3f #define lson rt<<1, l, m #define rson rt<<1|1, m+1, r u