UVA11770 - Lighting Away

题目链接

题意:一个有向图,每对一个结点操作。就能够触发连锁反应,使得该结点及它直接或间接指向的点均获得标记,问至少须要操作多少个结点使得全部结点获得标记

思路:有向图的强连通分量。用Tarjan缩点之后找出入度为0的点的个数,即为答案。跟UVA11504一样的题目。

UVA11504

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAXN = 10010;
const int MAXM = 100010;

struct Edge{
    int to, next;
}edge[MAXM];

int head[MAXN], tot;
int Low[MAXN], DFN[MAXN], Stack[MAXN], Belong[MAXN];
int Index, top;
int scc;
bool Instack[MAXN];
int num[MAXN], dg[MAXN];
int n, m;

void init() {
    tot = 0;
    memset(head, -1, sizeof(head));
}

void addedge(int u, int v) {
    edge[tot].to = v;
    edge[tot].next = head[u];
    head[u] = tot++;
}

void Tarjan(int u) {
    int v;
    Low[u] = DFN[u] = ++Index;
    Stack[top++] = u;
    Instack[u] = true;
    for (int i = head[u]; i != -1; i = edge[i].next) {
        v = edge[i].to;
        if (!DFN[v]) {
            Tarjan(v);
            if (Low[u] > Low[v]) Low[u] = Low[v];

        }
        else if (Instack[v] && Low[u] > DFN[v])
            Low[u] = DFN[v];
    }
    if (Low[u] == DFN[u]) {
        scc++;
        do {
            v = Stack[--top];
            Instack[v] = false;
            Belong[v] = scc;
            num[scc]++;
        } while (v != u);
    }
}

void solve() {
    memset(Low, 0, sizeof(Low));
    memset(DFN, 0, sizeof(DFN));
    memset(num, 0, sizeof(num));
    memset(Belong, 0, sizeof(Belong));
    memset(Stack, 0, sizeof(Stack));
    memset(Instack, false, sizeof(Instack));
    Index = scc = top = 0;
    for (int i = 1; i <= n; i++)
        if (!DFN[i])
            Tarjan(i);
}

int main() {
    int cas, t = 1;
    scanf("%d", &cas);
    while (cas--) {
        scanf("%d%d", &n, &m);
        init();
        int u, v;
        for (int i = 0; i < m; i++) {
            scanf("%d%d", &u, &v);
            addedge(u, v);
        }
        solve(); 

        memset(dg, 0, sizeof(dg));
        for (int u = 1; u <= n; u++) {
            for (int i = head[u]; i != -1; i = edge[i].next) {
                int v = edge[i].to;
                if (Belong[u] != Belong[v]) {
                    dg[Belong[v]]++;
                }
            }
        }
        int ans = 0;
        for (int i = 1; i <= scc; i++) {
            if (dg[i] == 0)
                ans++;
        }
        printf("Case %d: %d\n", t++, ans);
    }
    return 0;
}
时间: 2024-08-03 09:36:08

UVA11770 - Lighting Away的相关文章

&lt;OpenGL&gt;Lighting

I. Hidden-Surface Removal Purpose: In order to increase performance, it is very important to draw objects that are closer to the viewing position and to eliminate objects obscured by others nearer to the eye. Depth buffer: a value associating a depth

HTML5 画布上的 Three.js 环境灯光(HTML5 Canvas Three.js Ambient Lighting)

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. HTML5 画布上的 Three.js 环境灯光HTML5 Canvas Three.js Ambient Lighting <!DOCTY

【线性结构上的动态规划】UVa 11400 - Lighting System Design

Problem F Lighting System Design Input: Standard Input Output: Standard Output You are given the task to design a lighting system for a huge conference hall. After doing a lot of calculation & sketching, you have figured out the requirements for an e

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之8: Chap10: Lighting

这一章讲的是光照.光照(lighting)是Direct3D中非常重要的概念,而与之相对应的是材质(material)的概念.如果没有材质的话,那么光照的作用也无法体现. 在较早一些的关于DirectX 9的编程入门书籍里,一般是使用D3DLIGHT9结构体来建立一个光源,而用D3DMATERIAL9结构体来定义物体的材质.我们要做的就是一些很琐碎的家务活,基本上就是创建这些结构体对象.设定其中的参数.启用光照之类的,至于具体实现的细节就非吾等所需(和所能)操心的了. 不过在我们的"龙书&quo

SRBF Lighting

 SRBF的全称是Spherical Radial Basis Function,笔者擅自翻译为球面放射基底函数.因为SRBF并不怎么出名,相对来说,SH(Spherical Harmonic)球谐函数更为出名(出现的也更早),而且网上关于SRBF的资料也很少,这里写关于SRBF的文章,主要是针对对SRBF有兴趣的同学,一起探讨一下SRBF在渲染上的应用.在网上找到的唯一比较详尽的资料是在这个网页上(http://www.cse.cuhk.edu.hk/~ttwong/papers/srbf

UVA 11770 Lighting Away

RunID User Problem Result Memory Time Language Length Submit Time 2482977 zhyfzy J Accepted 0 KB 138 ms C++ 4.8.2 2322 B 2014-07-24 15:18:54 [题目大意] 一个有向图,每对一个结点操作,就可以触发连锁反应,使得该结点及它直接或间接指向的点均获得标记,问至少需要操作多少个结点使得所有结点获得标记 [题解] 缩点+DFS 首先能想到入度为0的点一定需要操作,但是

Spherical Harmonics Lighting

[转自:http://www.cnblogs.com/daniagger/archive/2012/05/29/2524133.html] 1.背景知识 1.1 光照表示 之前我们都只考虑光源点和物体表面点的光照作用,而现在,我们考虑物体表面点延伸的微型平面,这个微型平面作为半球形的底部,因此光照射进来的范围就是整个半球形,这也是BRDF的基础. 1.2 数据压缩 对于压缩信号来说,很多压缩技术基于这样一个思路:使用不同基函数的不同组合来组成一个更为复杂的数字信号表示. 保存数字信号的最繁琐方法

《The Cg Tutorial》阅读笔记——光照 Lighting

光照 Lighting 一.常见的几种光照模型 二.基本的光照模型 1. 数学公式描述: 表面色彩 = 发射 + 环境 + 漫射 + 镜面 Surface Color = Emissive + Ambient + Diffuse + Specular 2. 发射 Emissive Term [释义]“发射”用于描述物体表面在没有光源的情况下散射出的色彩.具有“发射”属性的物体不等同于光源,它们不具有照亮场景中其他物体的能力. [数学表达式] Emissive = Ke Ke是材质的发射属性. 3

LightOJ 1295 Lighting System Design (排序+dp)

题目链接:LightOJ 1295  Lighting System Desig 题意:给出n种灯(v,k,c,l)分别是灯的(电压,所需电源费用,灯的单价,所需灯的数量),电压高的灯可以代替电压低的灯但是电压低的灯不能代替电压高的等,每种灯的电压各种相同,问选n种灯最小的花费. 思路: 因为电压高的灯可以代替电压低的灯--按电压高到低排序, 然后求前缀和--因为当出现代替时可以,快速统计灯的花费. 然后就是dp--状态方程:dp[i] 买前i类灯的最少花费,sum[i]前缀和.dp[i]=mi