A magnificent century from Sachin Tendulkar and a five-wicket haul by Harbhajan Singh helped India to a 46-run victory over Sri Lanka in the Compaq Cup triangular one-day series in Colombo.

Tendulkar struck a masterly 138, while Mahendra Singh Dhoni and Yuvraj Singh hammered 56 apiece as India amassed a formidable 319 for five batting first.

Openers Tillakaratne Dilshan (42) and Sanath Jayasuriya (36) began the chase in earnest, putting on 64 for the opening wicket in a flash, but India's spinners severed the partnership and made further inroads as Sri Lanka slipped to 131 for five.

Kumar Sangakkara (33) then led a revival and middle-order batsman Thilina Kandamby gave Dhoni's men a scare with a battling 66, but India held their nerve to bowl the home side out for 273 in 46.3 overs.

Dilshan had begun with consecutive boundaries off Ishant Sharma, who had shared the new ball with Ashish Nehra.

The two fast bowlers had leaked runs first up, prompting Dhoni to press off-spinner Harbhajan into attack well inside the powerplay.

The off-spinner immediately obliged, ending Dilshan's stay by bowling him with a delivery that went straight on.

Harbhajan snapped up Mahela Jayawardene (one) in his next over, while part-time off-spinner Yusuf Pathan removed Jayasuriya in his first over - the 11th of the innings - to leave the home side struggling at 85 for three.

Sri Lanka promoted Thilan Thushara to pinch-hitter, but the move backfired with the batsman making just 15 before falling victim to Ishant.

Yuvraj then claimed Angelo Mathews cheaply as the wheels came off Sri Lanka's chase.

Mathews' dismissal brought Sangakkara and Kandamby to the crease and the two renewed the chase with vigour and had put on 51 for the sixth wicket when the Sri Lankan captain was bizarrely dismissed hit wicket.

Sangakkara had defended a full toss from RP Singh on the front foot, but the bat slipped from his grasp, flew over his right shoulder and crashed onto the stumps.

Kandamby continued the fightback in the company of Chamara Kapugedera (35) and in the process raised his fourth ODI half-century and his second in as many matches.

Their partnership for the seventh wicket had threatened to swing the match Sri Lanka's way, but Suresh Raina finally broke the partnership by having Kapugedera caught behind.

Harbhajan then removed Kandamby, bowling him while attempting to make room to cut on the off-side, turning the match decisively in India's favour.

The off-spinner finished off the Sri Lankan innings with the wickets of Lasith Malinga and last man Ajantha Mendis.

Earlier, Tendulkar had put on 85 for the opening wicket with Rahul Dravid (39), the duo ensuring a solid start for the visitors.

Dravid had set the pace, dispatching the second delivery with the new ball from Nuwan Kulasekara for four past point.

The former captain then went into his shell while Tendulkar unleashed an array of drives - mostly through the cover and long-off region - scoring at better than a run a ball as he dominated the partnership.

Dravid was dropped twice - at point by Dilshan while on 24 and again by Kulasekara off his own bowling when on 27 - but nicely held up one end as runs flowed right from the start.

Jayasuriya eventually broke that opening stand by claiming the wicket of Dravid in his first over of left-arm spin, but Dhoni promoted himself up the order and matched Tendulkar stroke for stroke as the two flayed Sri Lanka's bowlers around the park.

With both batsmen showing great form, Dhoni enforced the batting powerplay at the start of the 35th over and immediately smacked Malinga for a boundary.

Dhoni reached his 32nd one-day half-century by cracking Malinga for another boundary in that over which yielded 12.

Dhoni, however, fell shortly after, mistiming a pull against Malinga and finding Kandamby at mid-wicket.

Tendulkar, battled on, reaching his 44th one-day century with a single through the off-side off Mendis.

He put on 71 runs for the third wicket with Yuvraj, but fell leg before to Mendis while attempting a reverse sweep.

Yuvraj got India past the 300-run mark and reached his half-century off just 39 deliveries as the tourists finished with a flourish.