洛谷 P2194 HXY烧情侣

P2194 HXY烧情侣

裸tarjan

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<queue>
 7 using namespace std;
 8 #define LL long long
 9 #define maxn 1000000
10 #define inf 0x3f3f3f3f
11 const LL hzy=1e9+7;
12
13 LL ans1,ans2=1;
14
15 LL n,m,x[maxn],y[maxn],z,num,head[maxn],tim,ans;
16 LL top,sum1[maxn],v[maxn],minn[maxn],a;
17 LL sumcol,dfn[maxn],low[maxn],sumedge,Stack[maxn],point[maxn],color[maxn];
18 bool vis[maxn];
19
20 struct Edge{
21     int u,v,d,next;
22 }edge[maxn],edge2[maxn],edge3[maxn];
23
24 void read(LL &now)
25 {
26     char ch=getchar(); now=0; int f=1;
27     while(ch>‘9‘||ch<‘0‘) { if(ch==‘-‘) f*=-1; ch=getchar();}
28     while(ch>=‘0‘&&ch<=‘9‘) now=now*10+ch-‘0‘,ch=getchar();
29     now*=f;
30 }
31
32 void add_edge(LL u,LL v)
33 {
34     edge[++num].v=v;
35     edge[num].next=head[u]; head[u]=num;
36 }
37
38 LL tarjan(int now)
39 {
40     dfn[now]=low[now]=++tim;
41     vis[now]=true,Stack[++top]=now;
42     for(int i=head[now];i;i=edge[i].next)
43     {
44         int t=edge[i].v;
45         if(vis[t]) low[now]=min(low[now],dfn[t]);
46         else if(!dfn[t]) tarjan(t),low[now]=min(low[now],low[t]);
47     }
48     if(low[now]==dfn[now])
49     {
50         sumcol++,color[now]=sumcol,minn[sumcol]=inf;
51         for(;;)
52         {
53             a=Stack[top--];
54             vis[a]=0;
55             color[a]=sumcol;
56             if(v[a]<minn[sumcol])
57             {
58                 minn[sumcol]=v[a];
59                 sum1[sumcol]=0;
60             }
61             if(v[a]==minn[sumcol]) sum1[sumcol]++;
62             if(a==now) break;
63         }
64
65     }
66 }
67
68 int main()
69 {
70     read(n);
71     for(int i=1;i<=n;i++) read(v[i]);
72     read(m);
73     for(int i=1;i<=m;i++)
74     {
75         read(x[i]);
76         read(y[i]);
77         add_edge(x[i],y[i]);
78     }
79
80     for(int i=1;i<=n;i++)
81         if(!dfn[i]) tarjan(i);
82     for(int i=1;i<=sumcol;i++)
83     {
84         ans2*=sum1[i];
85         ans1+=minn[i];
86         ans2%=hzy;
87     }
88     printf("%lld %lld\n",ans1,ans2);
89 //    cout<<ans1<<" "<<ans2;
90     return 0;
91 }

时间: 2024-10-15 03:07:16

洛谷 P2194 HXY烧情侣的相关文章

洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码

洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要使用它需要一定的费用.m条单向通道连接相邻的两对情侣所在电影院.然后HXY有个绝技,如果她能从一个点开始烧,最后回到这个点,那么烧这条回路上的情侣的费用只需要该点的汽油费即可.并且每对情侣只需烧一遍,电影院可以重复去.然后她想花尽

【luogu P2194 HXY烧情侣】 题解

题目链接:https://www.luogu.org/problemnew/show/P2194 第一问:缩点并且统计其强连通分量里的最小耗费.把所有强连通分量的最小耗费加起来. 第二问:统计在每个强连通分量里与最小耗费相同的点数.乘法原理统计所有强连通分量答案. #include <stack> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm&g

HXY烧情侣(洛谷 2194)

题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要使用它需要一定的费用.m条单向通道连接相邻的两对情侣所在电影院.然后HXY有个绝技,如果她能从一个点开始烧,最后回到这个点,那么烧这条回路上的情侣的费用只需要该点的汽油费即可.并且每对情侣只需烧一遍,电影院可以重复去.然后她想花尽可能少的费用烧掉所有的情侣.问最少需要多少费用,并且当费用最少时的方案

HXY烧情侣

题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要使用它需要一定的费用.m条单向通道连接相邻的两对情侣所在电影院.然后HXY有个绝技,如果她能从一个点开始烧,最后回到这个点,那么烧这条回路上的情侣的费用只需要该点的汽油费即可.并且每对情侣只需烧一遍,电影院可以重复去.然后她想花尽可能少的费用烧掉所有的情侣.问最少需要多少费用,并且当费用最少时的方案

洛谷P2192 HXY玩卡片

题目描述 HXY得到了一些卡片,这些卡片上标有数字0或5.现在她可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被90整除这个条件.同时这个数不能含有前导0,即0不能作为这串数的首位.如果不能排出这样的数,输出“-1”. 输入输出格式 输入格式: 第一行,卡片的个数n. 第二行,分别给出了这n个数(只能为数字5或0). 输出格式: 仅一行,如果可以排出,则输出这个数.否则输出“-1”. 输入输出样例 输入样例#1: 复制 4 5 0 5 0 输出样例#1: 复制 0 输入样例

洛谷 P2195 HXY造公园

P2195 HXY造公园 题目描述 现在有一个现成的公园,有n个休息点和m条双向边连接两个休息点.众所周知,HXY是一个SXBK的强迫症患者,所以她打算施展魔法来改造公园并即时了解改造情况.她可以进行以下两种操作: 1.对某个休息点x,查询公园中所有经过该休息点的路径中的最长路径. 2.对于两个休息点x.y,如果x,y已经可以互相到达则忽略此次操作.否则,在x可到达的所有休息点和y可到达的所有休息点(包括x,y自身)分别选择一个休息点,然后在这两个休息点之间连一条边,并且这个选择应该满足对于连接

洛谷P2420 让我们异或吧

P2420 让我们异或吧 161通过 450提交 题目提供者该用户不存在 标签洛谷原创云端↑ 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 倍增可做的吧 玄学 更改根节点得分不一样- 这题面似乎对一些群体不太友- 这题为什么没数据 C++选手注意了 题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中-xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能够成为情

约数和问题(codevs2606&amp;amp;&amp;amp;洛谷2424)

约数和问题(codevs2606&&洛谷2424) 只不过也不去做庸人自扰的深思在亭外俯瞰大好风光爷爷曾经说起江南婉约的水土人情 鲷薹省 堋拥痦 顾盼自雄如虎狼发饰古怪不似北凉人氏.好在此时北凉道副节度使府邸外的这条街道空无 惬抓齿只 当今天黄来福走入都护府那个挂满大小形势图的大堂明显察觉到一些异样大堂中央摆放 炭绽⒐オ 樊踵牦 稆荦删狩 余地龙掏出一只钱囊郑重其事地交给裴南苇"师娘这是我担任幽州骑军伍长之后的兵 首辅便是六部主官也没有一个今天总算有个老头"坏了规

洛谷 P2709 BZOJ 3781 小B的询问

题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小B请你帮助他回答询问. 输入输出格式 输入格式: 第一行,三个整数N.M.K. 第二行,N个整数,表示小B的序列. 接下来的M行,每行两个整数L.R. 输出格式: M行,每行一个整数,其中第i行的整数表示第i个询问的答案. 输入输出样例 输入样例#1: 6 4 3 1 3 2 1 1 3