Пример #1
0
        public static IList <bool> Format(IList <bool> arr, int mask)
        {
            var result = new bool[mask - arr.Count].ToList();

            result.AddRange(arr);
            return(result);
        }
Пример #2
0
    static void Main()
    {
        int[] nm = Console.ReadLine().Split().Select(int.Parse).ToArray();
        bool[,] isFriend = new bool[nm[0], nm[0]];
        for (int i = 0; i < nm[1]; i++)
        {
            int[] xy = Console.ReadLine().Split().Select(x => int.Parse(x) - 1).ToArray();
            isFriend[xy[0], xy[1]] = true;
            isFriend[xy[1], xy[0]] = true;
        }
        List <bool> dp = new bool[] { true, true }.ToList();

        for (int i = 1; i < nm[0]; i++)
        {
            int    power = (int)Math.Pow(2, i);
            bool[] table = new bool[power];
            for (int j = 0; j < power; j++)
            {
                table[j] = false;
                if (dp[j])
                {
                    bool[] b = Convert.ToString(j, 2).Select(x => x == '1').Reverse().ToArray();
                    for (int k = 0; k < b.Length; k++)
                    {
                        if (b[k] && !isFriend[k, i])
                        {
                            goto end;
                        }
                    }
                    table[j] = true;
                }
                end :;
            }
            dp.AddRange(table);
        }
        int res = 0;

        for (int i = 0; i < dp.Count; i++)
        {
            if (dp[i])
            {
                res = Math.Max(res, Convert.ToString(i, 2).Count(x => x == '1'));
            }
        }
        Console.WriteLine(res);
    }
Пример #3
0
    static void Main()
    {
        var h = Read();
        int n = h[0], m = h[1];
        var x = Read();
        int xab = x[0], xac = x[1], xbc = x[2];
        var s  = Console.ReadLine();
        var es = new bool[m].Select(_ => Read()).ToList();

        es.AddRange(es.ToArray().Select(e => new[] { e[1], e[0], e[2] }));

        // 1: AB, 2: BA
        // 3: AC, 4: CA
        // 5: BC, 6: CB
        for (int v = 1; v <= n; v++)
        {
            switch (s[v - 1])
            {
            case 'A':
                es.Add(new[] { v, n + 1, xab });
                es.Add(new[] { v, n + 3, xac });
                es.Add(new[] { n + 2, v, 0 });
                es.Add(new[] { n + 4, v, 0 });
                break;

            case 'B':
                es.Add(new[] { v, n + 2, xab });
                es.Add(new[] { v, n + 5, xbc });
                es.Add(new[] { n + 1, v, 0 });
                es.Add(new[] { n + 6, v, 0 });
                break;

            case 'C':
                es.Add(new[] { v, n + 4, xac });
                es.Add(new[] { v, n + 6, xbc });
                es.Add(new[] { n + 3, v, 0 });
                es.Add(new[] { n + 5, v, 0 });
                break;

            default:
                break;
            }
        }

        Console.WriteLine(Dijkstra(n + 7, es.ToArray(), true, 1, n).Item1[n]);
    }