交通燈 並查集

2022-05-01 17:03:09 字數 3216 閱讀 4500

相信交通燈對於你來說並不陌生,交通燈分為紅色和綠色兩個階段,這兩個階段互相更替,保障著道路的安全。

在杭州一共有n

個路口,編號依次為1

到n。這些路口之間連線著m

條雙向道路,每條道路連線著兩個不同的路口,且任意兩個路口之間最多連線著一條道路。每條道路**都設定著乙個交通燈。

為了保障道路的安全,對於任意兩條道路,如果它們連線了同乙個路口,那麼它們不能同色。

你的朋友正乘著飛機從杭州的上空飛過,並拍了一張杭州的**。在**裡,每條道路的交通燈的顏色都清晰可辨。

你並不知道你的朋友是在什麼時候按下的快門,於是你想統計出有多少種可能的方案。每個方案可以用乙個顏色序列col1,col2,…,colm(coli∈)

來描述,表示每個交通燈的顏色。

第一行包含乙個正整數t(1≤t≤5000)

,表示測試資料的組數。

每組資料第一行包含兩個正整數n,m(1≤n,m≤100000)

,表示路口和道路的數量。

接下來m

行,每行包含兩個正整數ui,vi(1≤ui,vi≤n,ui≠vi)

,表示一條連線ui

路口和vi

路口的道路,任意兩個路口之間最多連線著一條道路。

輸入資料保證所有資料中n

和m的總和都不超過1000000

。對於每組資料輸出一行乙個整數,即ans

,即可能的方案數對1000000007=109+7

取模的結果。

注意城市布局可能不能保障道路的安全,此時的答案應該為0

2

3 31 2

2 33 1

4 21 2

3 4

0

4比賽的時候拿到這題感覺是可以做的

一開始想到 最大匹配 但是好像不行

然後開並查集 要求求出聯通塊個數cnt 然後2的cnt次冪就是答案( 比賽的時候居然寫成2*cnt了 不知道錯到**去了qaq )

題意還要求我們判環

如果是奇數環則不行 偶數環是可以的 如正方形和三角形

比賽的時候我在並查集裡面加了cnt 以此來判環

這種想法是對的 因為乙個點如果有三條邊顯然是錯的 除去這種情況 剩下的就是乙個點小於等於兩條邊 那麼只能構成一條鏈或者乙個環 比賽的時候幾乎寫出來了 但是最後答案的形式弄錯餓了(2*cnt)

其實很多情況不需要什麼演算法 直接亂搞就行了

補題的時候很快就想到思路 用乙個vis就可以表示兩種燈的狀態了

過程中還是wa了一些細節

1.爆int了 開ll 並且只要是乘法 只管加mod就行了!!!

2.如果是0個聯通塊 不應該是2的0次方 而是0

一定要等思路完善了再開始敲 不然只是浪費時間 並且只想沿著錯誤的思路思考 難以放棄並且重新開啟新的思路

比賽的思路:

#includeusing

namespace

std;

//input

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);i--)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m);

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define inf 0x3f3f3f3f

#define rep(i,n) for(int i=0;i

#define clr(a,v) memset(a,v,sizeof a)

/////////////////////////////////

/#define n 500+5

#define mod 1000000007

int vis[100005

];int cnt[100005

];int f[100005

];int find1(int

x)void union1(int a,int

b)ll fastpow(ll x,

intn)

return ans%mod;

}int

main()

}if(!ok)printf("

0\n"

);

else

}return0;

}

view code

模擬輸入路徑寫法:

#includeusing

namespace

std;

//input

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);i--)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m);

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define inf 0x3f3f3f3f

#define rep(i,n) for(int i=0;i

#define clr(a,v) memset(a,v,sizeof a)

/////////////////////////////////

/#define n 500+5

#define mod 1000000007

int vis[100005][2

];int f[100005

];int find1(int

x)ll fastpow(ll x,

intn)

return ans%mod;

}int

main()

if(!ok)printf("

0\n"

);

else

}return0;

}

view code

交通燈控制

問題描述,十字路,東西方向和南北方向燈,綠20s黃5s紅25s,倒計時顯示時間,另外,警車救護車等特殊狀態,都顯紅燈,且時間顯示不斷閃爍,通過之後,恢復原狀態。以下是我編寫的源 library ieee use ieee.std logic 1164.all use ieee.std logic u...

智慧型交通燈

交通燈有很多種型別,下面這個,還是比較簡單的。東西 a 南北 b 兩幹道交於乙個十字路口,各幹道有一組紅 黃 綠三色的指示燈,要求用微控制器控制交通燈,實現以下功能 1 a 道和b道上均有車輛要求通過時,a b道輪流放行。a道放行5分鐘 除錯時改為5秒鐘 b道放行4分鐘 除錯時改為4秒鐘 4 綠燈轉...

例程5 交通燈

1.準備 直插led 3 220 電阻 3 麵包板 1 麵包板跳線 1 扎 準備好上述元件我們就可以開工了,和上節課的實驗原理一樣,下面是我們提供參考的原理圖,我們使用的分別是數字10 7 4介面 按照右圖鏈結好電路後,就可以開始編寫程式了。既然是交通燈模擬實驗,紅黃綠三色小燈閃爍時間就要模擬真實的...